aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
diff options
context:
space:
mode:
authorGravatar Jakob Buchgraber <buchgr@google.com>2018-05-16 13:22:35 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-16 13:23:50 -0700
commitc223cb8d73d915693cfa021cc9dbc56c4ef94a21 (patch)
tree4aa265e7580466dd9f39b8a5cb1d80d69e700cf0 /src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
parent6f1a2ecbc05a3d8f7864de8ab085e6c6ec5b9f1a (diff)
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 50% when building Bazel (600K vs 1.2M). cc: @werkt @ola-rozenfeld Closes #5204. PiperOrigin-RevId: 196878093
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
index 5012cb74d5..8cbc6191b4 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
@@ -362,23 +362,18 @@ public final class TreeNodeRepository {
TreeNode child = entry.getChild();
if (child.isLeaf()) {
ActionInput input = child.getActionInput();
+ final Digest digest;
if (input instanceof VirtualActionInput) {
VirtualActionInput virtualInput = (VirtualActionInput) input;
- Digest digest = digestUtil.compute(virtualInput);
+ digest = digestUtil.compute(virtualInput);
virtualInputDigestCache.put(virtualInput, digest);
// There may be multiple inputs with the same digest. In that case, we don't care which
// one we get back from the digestVirtualInputCache later.
digestVirtualInputCache.put(digest, virtualInput);
- b.addFilesBuilder()
- .setName(entry.getSegment())
- .setDigest(digest)
- .setIsExecutable(false);
} else {
- b.addFilesBuilder()
- .setName(entry.getSegment())
- .setDigest(DigestUtil.getFromInputCache(input, inputFileCache))
- .setIsExecutable(execRoot.getRelative(input.getExecPathString()).isExecutable());
+ digest = DigestUtil.getFromInputCache(input, inputFileCache);
}
+ b.addFilesBuilder().setName(entry.getSegment()).setDigest(digest).setIsExecutable(true);
} else {
Digest childDigest = Preconditions.checkNotNull(treeNodeDigestCache.get(child));
if (child.getActionInput() != null) {