Skip to content

Commit 5993fc1

Browse files
authored
Copy headers from factory options into grpc requests (#238)
* Copy headers from factory options into grpc requests * Propagate metadata object to options * Avoid mutating incoming metadata
1 parent efd94ea commit 5993fc1

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

temporal-serviceclient/src/main/java/io/temporal/serviceclient/WorkflowServiceStubsImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public WorkflowServiceStubsImpl(
139139
ClientInterceptor deadlineInterceptor = new GrpcDeadlineInterceptor(options);
140140
GrpcTracingInterceptor tracingInterceptor = new GrpcTracingInterceptor();
141141
Metadata headers = new Metadata();
142+
headers.merge(options.getHeaders());
142143
headers.put(LIBRARY_VERSION_HEADER_KEY, Version.LIBRARY_VERSION);
143144
headers.put(SUPPORTED_SERVER_VERSIONS_HEADER_KEY, Version.SUPPORTED_SERVER_VERSIONS);
144145
headers.put(CLIENT_NAME_HEADER_KEY, CLIENT_NAME_HEADER_VALUE);

temporal-serviceclient/src/main/java/io/temporal/serviceclient/WorkflowServiceStubsOptions.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,15 @@
1919

2020
package io.temporal.serviceclient;
2121

22-
import com.google.common.collect.ImmutableMap;
2322
import com.uber.m3.tally.NoopScope;
2423
import com.uber.m3.tally.Scope;
2524
import io.grpc.ManagedChannel;
2625
import io.grpc.ManagedChannelBuilder;
26+
import io.grpc.Metadata;
2727
import io.grpc.NameResolver;
2828
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext;
2929
import io.temporal.api.workflowservice.v1.WorkflowServiceGrpc;
3030
import java.time.Duration;
31-
import java.util.Map;
3231
import java.util.Objects;
3332
import java.util.Optional;
3433
import java.util.function.Function;
@@ -87,7 +86,7 @@ public static WorkflowServiceStubsOptions getDefaultInstance() {
8786
private final Duration connectionBackoffResetFrequency;
8887

8988
/** Optional gRPC headers */
90-
private final Map<String, String> headers;
89+
private final Metadata headers;
9190

9291
private final Scope metricsScope;
9392

@@ -143,8 +142,11 @@ private WorkflowServiceStubsOptions(Builder builder, boolean ignore) {
143142
this.connectionBackoffResetFrequency = builder.connectionBackoffResetFrequency;
144143
this.blockingStubInterceptor = builder.blockingStubInterceptor;
145144
this.futureStubInterceptor = builder.futureStubInterceptor;
146-
this.headers =
147-
builder.headers == null ? ImmutableMap.of() : ImmutableMap.copyOf(builder.headers);
145+
if (builder.headers != null) {
146+
this.headers = builder.headers;
147+
} else {
148+
this.headers = new Metadata();
149+
}
148150
this.metricsScope = builder.metricsScope == null ? new NoopScope() : builder.metricsScope;
149151
}
150152

@@ -189,7 +191,7 @@ public Duration getConnectionBackoffResetFrequency() {
189191
return connectionBackoffResetFrequency;
190192
}
191193

192-
public Map<String, String> getHeaders() {
194+
public Metadata getHeaders() {
193195
return headers;
194196
}
195197

@@ -219,6 +221,7 @@ public Scope getMetricsScope() {
219221
* @author venkat
220222
*/
221223
public static class Builder {
224+
222225
private ManagedChannel channel;
223226
private SslContext sslContext;
224227
private boolean enableHttps;
@@ -227,7 +230,7 @@ public static class Builder {
227230
private Duration rpcLongPollTimeout = DEFAULT_POLL_RPC_TIMEOUT;
228231
private Duration rpcQueryTimeout = DEFAULT_QUERY_RPC_TIMEOUT;
229232
private Duration connectionBackoffResetFrequency = DEFAULT_CONNECTION_BACKOFF_RESET_FREQUENCY;
230-
private Map<String, String> headers;
233+
private Metadata headers;
231234
private Function<
232235
WorkflowServiceGrpc.WorkflowServiceBlockingStub,
233236
WorkflowServiceGrpc.WorkflowServiceBlockingStub>
@@ -330,7 +333,7 @@ public Builder setQueryRpcTimeout(Duration timeout) {
330333
return this;
331334
}
332335

333-
public Builder setHeaders(Map<String, String> headers) {
336+
public Builder setHeaders(Metadata headers) {
334337
this.headers = headers;
335338
return this;
336339
}

0 commit comments

Comments
 (0)