bazel: Unexpected IO error (Not a directory)
ERROR: /Users/buildkite/builds/darwin-x86-64-1-1/bazel/re2/BUILD:26:1: Couldn't build
file _objs/re2/re2/filtered_re2.o: C++ compilation of rule '//:re2' failed: Unexpected IO error.:
/private/var/tmp/_bazel_buildkite/90b05a586a8f6522c740e54d1334c7a0/execroot/
com_googlesource_code_re2/external/local_config_cc/wrapped_clang (Not a directory)
We see this error frequently on macOS. @mhlopko suggested that it’s a somewhat known bug in external repositories.
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 37 (37 by maintainers)
Commits related to this issue
- remote/exec: always mark files executable. The main motivation for this change is to act as a workaround for #4751. Additionally, this reduces the number of stat() system calls significantly e.g. by ... — committed to buchgr/bazel by buchgr 6 years ago
- remote/exec: always mark files executable. The main motivation for this change is to act as a workaround for #4751. Additionally, this reduces the number of stat() system calls significantly e.g. by ... — committed to bazelbuild/bazel by buchgr 6 years ago
- remote: fix unexpected IO error (not a directory) Fixes #4751 — committed to buchgr/bazel by buchgr 5 years ago
- remote: set executable bit of an input file based on its real value. The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue ... — committed to bazelbuild/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value. When build without bytes is enabled, we use isExecutable field of OutputFile for intermediate input files. This is achieved by inj... — committed to coeuvre/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue ... — committed to bazelbuild/bazel by coeuvre 3 years ago
- remote: set executable bit of an input file based on its real value The "always mark" was introduced by 3e3b71ae038bc9ac90456f93697c640ab9ed8a55 which was a workaround for #4751. However, that issue ... — committed to bazelbuild/bazel by coeuvre 3 years ago
I have finally found the problem and solution to this bug.The issue is that we always create
Path
objects usingexecRoot.getRelativePath(rootRelativePath)
. Now that mostly works except for external dependencies, because these aren’t symlinked under the execroot but only below their artifact root, which happens to be the output base.The solution is to create the path object for an
Artifact
only using itsArtifactRoot
(Path p = artifact.getRoot().getRoot().getRelative(rootRelativePath)
and to only use the exec path forActionInput
objects.I ll send out a fix.