Skip to content

Commit 3174675

Browse files
authored
Add isolation group header to service client (#821)
Add a new header to thrift and grpc client to specify the isolation group of the client.
1 parent ba1c0ce commit 3174675

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Changelog
2+
23
## 3.8.0
34
- Graceful shutdown based on sigterm handler
45
- Adding cross domain signal/child workflow creation support

src/main/java/com/uber/cadence/internal/compatibility/proto/serviceclient/GrpcServiceStubs.java

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.uber.cadence.internal.compatibility.proto.serviceclient;
1717

18+
import com.google.common.base.Strings;
1819
import com.uber.cadence.api.v1.DomainAPIGrpc;
1920
import com.uber.cadence.api.v1.MetaAPIGrpc;
2021
import com.uber.cadence.api.v1.MetaAPIGrpc.MetaAPIBlockingStub;
@@ -61,6 +62,8 @@ final class GrpcServiceStubs implements IGrpcServiceStubs {
6162
Metadata.Key.of("cadence-client-feature-version", Metadata.ASCII_STRING_MARSHALLER);
6263
private static final Metadata.Key<String> CLIENT_IMPL_HEADER_KEY =
6364
Metadata.Key.of("cadence-client-name", Metadata.ASCII_STRING_MARSHALLER);
65+
private static final Metadata.Key<String> ISOLATION_GROUP_HEADER_KEY =
66+
Metadata.Key.of("cadence-client-isolation-group", Metadata.ASCII_STRING_MARSHALLER);
6467
private static final Metadata.Key<String> RPC_SERVICE_NAME_HEADER_KEY =
6568
Metadata.Key.of("rpc-service", Metadata.ASCII_STRING_MARSHALLER);
6669
private static final Metadata.Key<String> RPC_CALLER_NAME_HEADER_KEY =
@@ -105,6 +108,9 @@ final class GrpcServiceStubs implements IGrpcServiceStubs {
105108
headers.put(RPC_SERVICE_NAME_HEADER_KEY, options.getServiceName());
106109
headers.put(RPC_CALLER_NAME_HEADER_KEY, CLIENT_IMPL_HEADER_VALUE);
107110
headers.put(RPC_ENCODING_HEADER_KEY, "proto");
111+
if (!Strings.isNullOrEmpty(options.getIsolationGroup())) {
112+
headers.put(ISOLATION_GROUP_HEADER_KEY, options.getIsolationGroup());
113+
}
108114
Channel interceptedChannel =
109115
ClientInterceptors.intercept(
110116
channel,

src/main/java/com/uber/cadence/serviceclient/ClientOptions.java

+19
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public class ClientOptions {
7979
private final IAuthorizationProvider authProvider;
8080
/** Optional Feature flags to turn on/off some Cadence features */
8181
private final FeatureFlags featureFlags;
82+
/** Optional isolation group of the service if tasklist isolation is enabled */
83+
private final String isolationGroup;
8284

8385
private ClientOptions(Builder builder) {
8486
if (Strings.isNullOrEmpty(builder.host)) {
@@ -123,6 +125,7 @@ private ClientOptions(Builder builder) {
123125
this.headers = ImmutableMap.of();
124126
}
125127
this.authProvider = builder.authProvider;
128+
this.isolationGroup = builder.isolationGroup;
126129
}
127130

128131
public static ClientOptions defaultInstance() {
@@ -194,6 +197,10 @@ public FeatureFlags getFeatureFlags() {
194197
return this.featureFlags;
195198
}
196199

200+
public String getIsolationGroup() {
201+
return this.isolationGroup;
202+
}
203+
197204
/**
198205
* Builder is the builder for ClientOptions.
199206
*
@@ -216,6 +223,7 @@ public static class Builder {
216223
private Map<String, String> headers;
217224
private IAuthorizationProvider authProvider;
218225
private FeatureFlags featureFlags;
226+
private String isolationGroup;
219227

220228
private Builder() {}
221229

@@ -350,6 +358,17 @@ public Builder setHeaders(Map<String, String> headers) {
350358
return this;
351359
}
352360

361+
/**
362+
* Sets the isolation group to be used for matching.
363+
*
364+
* @param isolationGroup
365+
* @return Builder for ClentOptions
366+
*/
367+
public Builder setIsolationGroup(String isolationGroup) {
368+
this.isolationGroup = isolationGroup;
369+
return this;
370+
}
371+
353372
/**
354373
* Builds and returns a ClientOptions object.
355374
*

src/main/java/com/uber/cadence/serviceclient/WorkflowServiceTChannel.java

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static com.uber.cadence.internal.metrics.MetricsTagValue.REQUEST_TYPE_LONG_POLL;
2121
import static com.uber.cadence.internal.metrics.MetricsTagValue.REQUEST_TYPE_NORMAL;
2222

23+
import com.google.common.base.Strings;
2324
import com.google.common.collect.ImmutableMap;
2425
import com.google.gson.Gson;
2526
import com.google.gson.GsonBuilder;
@@ -152,6 +153,10 @@ private static Map<String, String> getThriftHeaders(ClientOptions options) {
152153
builder.put("cadence-client-feature-flags", serialized);
153154
}
154155

156+
if (!Strings.isNullOrEmpty(options.getIsolationGroup())) {
157+
builder.put("cadence-client-isolation-group", options.getIsolationGroup());
158+
}
159+
155160
return builder.build();
156161
}
157162

0 commit comments

Comments
 (0)