From 0e017cc54b831137f20fd16eb65a253eaa159e1b Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 2 Jan 2024 15:48:51 -0800 Subject: [PATCH] Gracefully handle setting the same header with --bes_header twice. Fixes https://github.com/bazelbuild/bazel/issues/20681 Closes #20684. PiperOrigin-RevId: 595228741 Change-Id: I06bab1efa25deaa4085acfffd350dc62f9f73aa3 --- .../buildeventservice/BazelBuildEventServiceModule.java | 6 +++++- .../BazelBuildEventServiceModuleTest.java | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModule.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModule.java index a978087aed995b..0baf62a7f0e0a2 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModule.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModule.java @@ -64,7 +64,11 @@ static BackendConfig create( return new AutoValue_BazelBuildEventServiceModule_BackendConfig( besOptions.besBackend, besOptions.besProxy, - ImmutableMap.copyOf(besOptions.besHeaders).entrySet().asList(), + ImmutableMap.builder() + .putAll(besOptions.besHeaders) + .buildKeepingLast() + .entrySet() + .asList(), authAndTLSOptions); } } diff --git a/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java b/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java index 6a177424add7dd..b1d215df703462 100644 --- a/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java +++ b/src/test/java/com/google/devtools/build/lib/buildeventservice/BazelBuildEventServiceModuleTest.java @@ -24,7 +24,6 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; @@ -696,12 +695,16 @@ public void testMakeGrpcMetadata() throws Exception { besOptions.besBackend = "bes-backend"; besOptions.besProxy = "bes-proxy"; besOptions.besHeaders = - ImmutableMap.of("key1", "val1", "key2", "val2", "key3", "val3").entrySet().asList(); + ImmutableList.of( + Map.entry("key1", "val1"), + Map.entry("key2", "val2"), + Map.entry("key3", "val3"), + Map.entry("key1", "val4")); BackendConfig newConfig = BackendConfig.create(besOptions, authAndTLSOptions); Metadata metadata = BazelBuildEventServiceModule.makeGrpcMetadata(newConfig); assertThat(metadata.get(Metadata.Key.of("key1", Metadata.ASCII_STRING_MARSHALLER))) - .isEqualTo("val1"); + .isEqualTo("val4"); assertThat(metadata.get(Metadata.Key.of("key2", Metadata.ASCII_STRING_MARSHALLER))) .isEqualTo("val2"); assertThat(metadata.get(Metadata.Key.of("key3", Metadata.ASCII_STRING_MARSHALLER)))