In Bazel, the "execution requirements" and "execution properties" are similar but different mechanisms for passing data to the execution strategy (which in practice almost always means they configure the remote executor). There are a number of asymmetries here and we should unify the systems, but that's a larger-scale project for a later day.
One in particular, though, are the allowed keys. Specifically, when tags are converted to execution
requirements, the code in
TagUtils.legalExecInfoKeys is used to check if the value is allowed.
There is no similar check for execution property keys, however, which means that a user can use exec_properties to pass any key they wish to the remote executor.
I don't actually know if this is a problem! Maybe we want to filter tags, because tags cover more things than just execution requirements, and we don't want to send things like "noci" to the remote executor. Or maybe we should filter the exec properties, because we don't want users to be able to override execution timeouts (as an example), we only want an allowed list of things users can affect.
So, people interested in remote execution, what are your thoughts? What's the right behavior here? I tested a change that adds this filter for execution properties (
https://github.com/bazelbuild/bazel/pull/16902), but I'm not sure this is the right thing to do, so I'd like some advice.
Thanks!
John Cater