reclient icon indicating copy to clipboard operation
reclient copied to clipboard

Ninja work dir not added automatically as input dir

Open YngveNPettersen opened this issue 1 year ago • 2 comments

I am currently working to configure reclient to use a buildfarm remote execution backend, and presently testing on Linux in its remote-only mode (NOT racing or fallback; I want to be sure this configuration works for remote execution).

One problem I have encountered now that I finally have a working remote end, is that Chromium's //third_party/angle submodule have 300+ targets that trigger this kind of error:

reclient[<guid>]: RemoteErrorResultStatus: rpc error: code = FailedPrecondition desc = Action <hash>/147 is invalid: working directory is not an input directory. details = violations: {
  type: "INVALID"
  subject: "The `Command` of the `Action` was invalid."
  description: "working directory is not an input directory"
}

Inspecting the command and treelayout shows that these commands does not include the out/foo directory as an input, unless it is referenced in the command somehow, e.g. -Igen causes "set_by_reclient/a/gen/" to be added as a input directory, and those builds work (unless there are other compile issues; separate issue). If the remote working dir "set_by_reclient/a" is not included somehow in the input directory the result is the above error.

YngveNPettersen avatar Apr 30 '24 09:04 YngveNPettersen

For reference, the validation's justification is presented here:

From remote_execution.proto on the remote-apis repository: https://github.com/bazelbuild/remote-apis/blob/1f36c310b28d762b258ea577ed08e8203274efae/build/bazel/remote/execution/v2/remote_execution.proto#L689-L692

  // The working directory, relative to the input root, for the command to run
  // in. It must be a directory which exists in the input tree. If it is left
  // empty, then the action is run in the input root.
  string working_directory = 6;

werkt avatar Apr 30 '24 12:04 werkt

In bazelbuild/bazel-buildfarm#1718,

Technically, I can work around this by using reclient's racing or local fallback mode, which is likely to be the production configuration.

I had a similar issue.

In my case, just RBE_CXX_EXEC_STRATEGY="racing" helps my builds. "remote_local_fallback" made builds halting. (Just FYI. I had some other issues like https://github.com/bazelbuild/reclient/discussions/47. So remote_local_fallback may work as a workaround on other envs.)

monaka avatar May 06 '24 02:05 monaka