New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 611189 link

Starred by 1 user

Issue metadata

Status: Verified
Owner:
Closed: Jun 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 1
Type: Bug



Sign in to add a comment

[Findit] It is possible for compile or test recipe to attempt a checkout of a nonexistent revision

Project Member Reported by lijeffrey@chromium.org, May 11 2016

Issue description

In some cases, one of the revisions to be checked out doesn't actually exist, causing exceptions in findit recipes:

Traceback (most recent call last):
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 1764, in <module>
    sys.exit(main())
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 1738, in main
    step_text)
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 1620, in checkout
    gclient_output = ensure_checkout(**checkout_parameters)
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 1308, in ensure_checkout
    git_ref = git_checkout(solutions, revisions, shallow, refs, git_cache_dir)
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 977, in git_checkout
    force_revision(sln_dir, revision)
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 921, in force_revision
    git_ref = get_git_hash(int(revision), branch, folder_name)
  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\resources\bot_update.py", line 809, in get_git_hash
    (revision, sln_dir))
__main__.SVNRevisionNotFound: We can't resolve svn r271202 into a git hash in E:\b\build\slave\win_webkit\build\src
step returned non-zero exit code: 1

@@@STEP_LINK@stdout-->stdio@https://luci-logdog.appspot.com/v/?s=bb%2Ftryserver.chromium.win%2Fwin_chromium_variable_webkit_win7_builder%2F53%2F%2B%2Frecipes%2Fsteps%2FUncaught_Exception%2F0%2Fstdout@@@
@@@STEP_LOG_LINE@exception@Traceback (most recent call last):@@@
@@@STEP_LINK@logdog-->exception@https://luci-logdog.appspot.com/v/?s=bb%2Ftryserver.chromium.win%2Fwin_chromium_variable_webkit_win7_builder%2F53%2F%2B%2Frecipes%2Fsteps%2FUncaught_Exception%2F0%2Flogs%2Fexception%2F0@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\run.py", line 397, in run@@@
@@@STEP_LOG_LINE@exception@    recipe_result = recipe_script.run(api, api._engine.properties)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\loader.py", line 57, in run@@@
@@@STEP_LOG_LINE@exception@    self.RunSteps, properties, self.PROPERTIES, api=api)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\loader.py", line 512, in invoke_with_properties@@@
@@@STEP_LOG_LINE@exception@    **additional_args)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\loader.py", line 473, in _invoke_with_properties@@@
@@@STEP_LOG_LINE@exception@    return callable_obj(*props, **additional_args)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts/slave\recipes\findit/chromium/test.py", line 196, in RunSteps@@@
@@@STEP_LOG_LINE@exception@    root_solution_revision=bad_revision)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\recipe_api.py", line 220, in _inner@@@
@@@STEP_LOG_LINE@exception@    return func(*a, **kw)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts/slave\recipe_modules\chromium_tests\api.py", line 203, in prepare_checkout@@@
@@@STEP_LOG_LINE@exception@    bot_config, root_solution_revision, force=force)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\recipe_api.py", line 220, in _inner@@@
@@@STEP_LOG_LINE@exception@    return func(*a, **kw)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts/slave\recipe_modules\chromium_tests\api.py", line 166, in ensure_checkout@@@
@@@STEP_LOG_LINE@exception@    force=force)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\recipe_engine\recipe_engine\recipe_api.py", line 220, in _inner@@@
@@@STEP_LOG_LINE@exception@    return func(*a, **kw)@@@
@@@STEP_LOG_LINE@exception@  File "E:\b\build\scripts\slave\.recipe_deps\depot_tools\recipe_modules\bot_update\api.py", line 274, in ensure_checkout@@@
@@@STEP_LOG_LINE@exception@    co_root = step_result.json.output['root']@@@
@@@STEP_LOG_LINE@exception@KeyError: 'root'@@@

Some more detailed analysis captured in https://bugs.chromium.org/p/chromium/issues/detail?id=610853


Example builds ending in such error:
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/11
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/13
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/16
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/20
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/21
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/22
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/23
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/24
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/28
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/29
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/30
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/32
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/38
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/44
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/53/
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/54/
 

Comment 1 by st...@chromium.org, May 18 2016

The root case for these cases seems to be the same: build json data in https://chrome-build-extract.appspot.com/ is not up-to-date when Findit pulls from there, and Findit uses such outdated data.

For the case https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_variable_webkit_win7_builder/builds/54/, Findit should have downloaded the build json data from http://chrome-build-extract.appspot.com/p/chromium.webkit/builders/WebKit%20Win7%20(dbg)/builds/5341?json=1 because the attached build.from.chrome_build_extract.json has a field "paddedBuildNumber". This field is not available in the original data in the buildbot master -- attached build.from.buildbot.master.json.

However, build.from.chrome_build_extract.json is outdated, back in 2014.
As old build data is used by Findit, the regression range will be very old -- svn revision before migration to Git.
build.from.chrome_build_extract.json
24.6 KB View Download
build.from.buildbot.master.json
133 KB View Download

Comment 2 by st...@chromium.org, May 18 2016

Owner: lijeffrey@chromium.org
Status: Assigned (was: Untriaged)
As of now, the latest build on "WebKit Win7 (dbg)" is 5680 -- https://build.chromium.org/p/chromium.webkit/builders/WebKit%20Win7%20%28dbg%29/builds/5680
But chrome-build-extract already has 9500 http://chrome-build-extract.appspot.com/p/chromium.webkit/builders/WebKit%20Win7%20(dbg)/builds/9500?json=1

Comment 3 by st...@chromium.org, May 18 2016

Labels: -Pri-2 -Findit Pri-1
Some action items here:

1. Add a check of WfBuild.start_time, if it is one day older than the current timestamp, log an error and bail out instead of triggering a try-job.
2. Add a field "data_source" in wf_build.py to track where the build json data is from. Either BM -- buildbot master, or CBE -- https://chrome-build-extract.appspot.com/.
3. Add a flag in model/wf_config.py to turn on/off for pulling build json data from CBE. And turning it off for experiment pulling from buildbot master directly. If Findit DDOS the buildbot master, fall back to CBE and a better solution should be found.
   (Hopefully it is fine for Findit to pull from buildbot master, because we only pull when there is a failure.)
4. Move _DOWNLOAD_INTERVAL_SECONDS in waterfall/lock_util.py to wf_config.py, so that we could increase the intervals for http requests to the same buildbot master when Findit leads to DDOS.
Project Member

Comment 4 by bugdroid1@chromium.org, May 21 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/infra/infra.git/+/458b527a43bcdac9bb02dabc21dbbbd232fea22c

commit 458b527a43bcdac9bb02dabc21dbbbd232fea22c
Author: lijeffrey <lijeffrey@chromium.org>
Date: Sat May 21 09:07:02 2016

[Findit] Bailing out if build data is too old and moving relevant settings to config

BUG= 611189 

Review-Url: https://codereview.chromium.org/1999653003

[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/handlers/config.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/handlers/test/config_test.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/model/wf_build.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/model/wf_config.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/templates/config.html
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/build_util.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/lock_util.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/test/build_util_test.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/test/try_job_util_test.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/test/waterfall_config_test.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/test/wf_testcase.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/try_job_util.py
[modify] https://crrev.com/458b527a43bcdac9bb02dabc21dbbbd232fea22c/appengine/findit/waterfall/waterfall_config.py

Status: Verified (was: Assigned)

Sign in to add a comment