Age | Commit message (Collapse) | Author |
|
The default remote-execution protocol (which is used in compatible mode)
defines symbolic links as embedded fields within a Directory message. No
separate blobs will be stored in CAS, but they are required, e.g., when a tree
is installed. To fix that issue, we upload any symbolic link received from the
remote execution either as explicit output or as part of an output Directory
message as separate blob to the remote CAS, similar how we handle output
Directory messages themselves.
|
|
|
|
Now that support for split/splice is part of the official
capabilites announcement, use those to determine if we should try
splitting/splicing. This change is actually mandatory as the new
standard mandates that clients must check before trying to use
the service.
Co-authored-by: Klaus Aehlig <klaus.aehlig@huawei.com>
|
|
So far, blob split/splice was an extension of our build tool; now
it got standardized. Therefore we can, and hence should, use the
official proto file without modifications. As algorithm negociation
is not yet standardized, drop it for now; we will readd it, once
a standard is agreed upon.
|
|
... and while there, add Oxford comma to make the comment clearer.
|
|
The google-default-arguments check normally imposes that virtual
methods have no default arguments. For our use-cases, all
implementations of such methods are expected to use the same
default arguments, and thus this check is manually disabled via
NOLINT comments. However, this is not done consistently.
This commit cleans this up and clarifies our intent by:
- removing the default values (and the NOLINT statement) for all
implementations of virtual methods with default argument values,
matching the desired intended behaviour, but
- keeping the clang-tidy check for future cases where derived
classes would want to provide each different defaults.
|
|
... and prepare local execution for clients
using only RBEv2.1 (setting only output_paths).
|
|
|
|
... as it is only needed for local execution, there is no
need to provide it in the common api interface.
|
|
|
|
This ensures that any entries that the standard remote execution
protocol accepts but are invalid in justbuild, i.e., upwards
symlinks, are rejected.
For this purpose, do not fail in the action response instances,
just perform the check there, as all required information is
available, and set a flag that the executor can check as needed.
|
|
While in practice a failure to populate the fields of a response
happens once per invocation, as it will trigger a failure of the
execution, from an algorithmic standpoint the flag to mark a
successful population of the response fields should only be set on
actual success.
Fix this.
|
|
... and do mark artifacts internally as synchronized. First all all,
we will abort anyway, to the entry won't even be read and, secondly
it is not necessarily true that the artifact is synchronized.
|
|
|
|
|
|
The BazelNetworkReader contains an optimization for reading directories
in case the remote execution (in compatible mode) supports the GetTree
request. This is, however not the case for many remote exeuciton
services, including our own single-node execution service. So the
code is basically untested and rarely used, if at all. Moreover,
justbuild is usually used in native mode and using compatibility
mode is expected to handle tree operations less efficient.
Therefore, remove this basically dead code and decrease complexity
this way.
|
|
... instead of at debug. We expect actions to be not in cache, so the fact
that we experience cache misses is not surprising. Given the information
available at this point, a useful logging indicating (in terms meaningful
to the user) is not possible. Therefore, keep the debug-level log clean.
|
|
... as that failure does not necessarily abort the build.
|
|
|
|
to avoid downloading the same blobs.
|
|
...to avoid downloading the same blobs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... instead of reporting an error, although not being fatal.
|
|
|
|
...since ArtifactBlob rehashes data on construction and guarantees that the digest matches the content.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... and rename appropriately to reflect contents more precisely
than the generic "common". This separation also disentangles
dependencies a bit.
|
|
...by removing an extra std::vector of iterators. Instead, remove elements directly from std::unordered_set.
|
|
|
|
and drop precreated info_map.
|
|
|