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

Issue 655750 link

Starred by 3 users

Issue metadata

Status: Verified
Owner:
Closed: Oct 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug
Team-Accessibility



Sign in to add a comment

select_to_speak exists build error on SimpleChromeWorkflow step for veyron_jerry

Project Member Reported by lpique@chromium.org, Oct 13 2016

Issue description

Not sure why this happened on only this one PFQ builder.

A file already exists when it goes to make a directory with the same name.

https://uberchromegw.corp.google.com/i/chromeos/builders/veyron_jerry-chromium-pfq/builds/260/steps/SimpleChromeWorkflow/logs/stdio

[1197/31561] ACTION //chrome/browser/resources/chromeos/select_to_speak:select_to_speak_copied_files(//build/toolchain/cros:target)
FAILED: obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_copied_files_copy.stamp 
python ../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py -m copy --stampfile obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_copied_files_copy.stamp -d resources/chromeos/select_to_speak -w ../../chrome/browser/resources/chromeos/select_to_speak: -w ../../chrome/third_party/chromevox/third_party/closure-library/closure/goog:closure ../../chrome/browser/resources/chromeos/select_to_speak/background.js
Traceback (most recent call last):
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 378, in <module>
    main()
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 361, in main
    LinkOrCopyFiles(bundle.GetSources(), options.dest_dir)
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 247, in LinkOrCopyFiles
    os.path.join(dest_dir, source.GetOutPath()))
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 237, in LinkOrCopyOneFile
    os.makedirs(os.path.dirname(dst))
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: 'resources/chromeos/select_to_speak'
 

Comment 1 by kinaba@chromium.org, Oct 14 2016

The makedirs is guarded by os.path.exists:
    if not os.path.exists(os.path.dirname(dst)):
      os.makedirs(os.path.dirname(dst))
(https://cs.chromium.org/chromium/src/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py?q=chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py&sq=package:chromium&dr&l=235)

Presumably a concurrently run task (select_to_speak_guest_manifest) created the directory between the two lines?


[1189/31561] STAMP obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_guest_manifest.inputdeps.stamp
[1190/31561] STAMP obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_copied_files.inputdeps.stamp
...
...
[1197/31561] ACTION //chrome/browser/resources/chromeos/select_to_speak:select_to_speak_copied_files(//build/toolchain/cros:target)
FAILED: obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_copied_files_copy.stamp 
python ../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py -m copy --stampfile obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_copied_files_copy.stamp -d resources/chromeos/select_to_speak -w ../../chrome/browser/resources/chromeos/select_to_speak: -w ../../chrome/third_party/chromevox/third_party/closure-library/closure/goog:closure ../../chrome/browser/resources/chromeos/select_to_speak/background.js
Traceback (most recent call last):
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 378, in <module>
    main()
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 361, in main
    LinkOrCopyFiles(bundle.GetSources(), options.dest_dir)
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 247, in LinkOrCopyFiles
    os.path.join(dest_dir, source.GetOutPath()))
  File "../../chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py", line 237, in LinkOrCopyOneFile
    os.makedirs(os.path.dirname(dst))
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: 'resources/chromeos/select_to_speak'
[1198/31561] STAMP obj/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_manifest.inputdeps.stamp
...
...
[1202/31561] ACTION //chrome/browser/resources/chromeos/select_to_speak:select_to_speak_guest_manifest(//build/toolchain/cros:target)

Comment 2 by kinaba@chromium.org, Oct 14 2016

Owner: kinaba@chromium.org
Status: Started
Wrote a simple patch
https://codereview.chromium.org/2421613003/
Project Member

Comment 3 by bugdroid1@chromium.org, Oct 14 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c3fd7a5f37395debb368939ef8cf3eeba32fc140

commit c3fd7a5f37395debb368939ef8cf3eeba32fc140
Author: kinaba <kinaba@chromium.org>
Date: Fri Oct 14 07:33:28 2016

chromevox: Fix a racy failure in directory creation in jsbundler.py.

Previous implementation can fail if other concurrent task created the
directory between path.exists and makedirs.

BUG= 655750 
TEST=Manually build select_to_speak with ninja -j10 many times.
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation

Review-Url: https://codereview.chromium.org/2421613003
Cr-Commit-Position: refs/heads/master@{#425268}

[modify] https://crrev.com/c3fd7a5f37395debb368939ef8cf3eeba32fc140/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py

Comment 4 by kinaba@chromium.org, Oct 14 2016

Status: Fixed (was: Started)
Status: Verified (was: Fixed)

Sign in to add a comment