aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/buildeventservice
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-08-03 12:00:00 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-03 12:01:30 -0700
commit6c304abb788b4fd35dd2eb4bb83983985e84c076 (patch)
tree3697f084d49f34baf3e126db03060f6ffcbf7fce /src/main/java/com/google/devtools/build/lib/buildeventservice
parent054728b13417e1705718ac6337253de4bc0519bb (diff)
Make BES tolerant to duplicate artifacts in output groups.
It is possible to create duplicate artifacts with different owners, so we have to tolerate this when uploading files. RELNOTES: None PiperOrigin-RevId: 207302014
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildeventservice')
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
index 160c2ae4fc..dfb4bdee98 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
@@ -25,7 +25,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -65,6 +64,8 @@ import io.grpc.StatusException;
import java.time.Duration;
import java.util.Collection;
import java.util.Deque;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.Callable;
@@ -343,12 +344,14 @@ public class BuildEventServiceTransport implements BuildEventTransport {
}
Collection<LocalFile> localFiles = event.referencedLocalFiles();
- ImmutableMap.Builder<Path, LocalFile> localFileMap =
- ImmutableMap.builderWithExpectedSize(localFiles.size());
+ Map<Path, LocalFile> localFileMap = new HashMap<>(localFiles.size());
for (LocalFile localFile : localFiles) {
- localFileMap.put(localFile.path, localFile);
+ // It is possible for targets to have duplicate artifacts (same path but different owners)
+ // in their output groups. Since they didn't trigger an artifact conflict they are the
+ // same file, so just skip either one
+ localFileMap.putIfAbsent(localFile.path, localFile);
}
- ListenableFuture<PathConverter> upload = artifactUploader.upload(localFileMap.build());
+ ListenableFuture<PathConverter> upload = artifactUploader.upload(localFileMap);
InternalOrderedBuildEvent buildEvent =
new DefaultInternalOrderedBuildEvent(
event, namer, upload, besProtoUtil.nextSequenceNumber(), timestamp());