Skip to content

Commit 4a7ce14

Browse files
authored
feat: allow configuring grpc deadline (#178)
feat: allow setting deadline
1 parent f504f64 commit 4a7ce14

7 files changed

Lines changed: 33 additions & 12 deletions

File tree

openfeature-provider/src/test/java/com/spotify/confidence/FeatureProviderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void beforeEach() {
7676
new TelemetryClientInterceptor(telemetry);
7777
final FlagResolverClientImpl flagResolver =
7878
new FlagResolverClientImpl(
79-
new GrpcFlagResolver("fake-secret", channel, telemetryInterceptor), telemetry);
79+
new GrpcFlagResolver("fake-secret", channel, telemetryInterceptor, 1_000), telemetry);
8080
final Confidence confidence = Confidence.create(fakeEventSender, flagResolver, "clientKey");
8181
final FeatureProvider featureProvider = new ConfidenceFeatureProvider(confidence);
8282

sdk-java/src/main/java/com/spotify/confidence/Confidence.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,12 +334,24 @@ public static class Builder {
334334
private ManagedChannel flagResolverManagedChannel = DEFAULT_CHANNEL;
335335
private boolean disableTelemetry = false;
336336
private boolean isProvider = false;
337+
private int resolveDeadlineMs = 10_000;
338+
private int eventSenderDeadlineMs = 5_000;
337339

338340
public Builder(@Nonnull String clientSecret) {
339341
this.clientSecret = clientSecret;
340342
registerChannelForShutdown(DEFAULT_CHANNEL);
341343
}
342344

345+
public Builder resolveDeadlineMs(int resolveDeadlineMs) {
346+
this.resolveDeadlineMs = resolveDeadlineMs;
347+
return this;
348+
}
349+
350+
public Builder eventSenderDeadlineMs(int eventSenderDeadlineMs) {
351+
this.eventSenderDeadlineMs = eventSenderDeadlineMs;
352+
return this;
353+
}
354+
343355
public Builder flagResolverManagedChannel(String host, int port) {
344356
this.flagResolverManagedChannel =
345357
ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();
@@ -368,12 +380,14 @@ public Confidence build() {
368380
final TelemetryClientInterceptor telemetryInterceptor =
369381
new TelemetryClientInterceptor(telemetry);
370382
final GrpcFlagResolver flagResolver =
371-
new GrpcFlagResolver(clientSecret, flagResolverManagedChannel, telemetryInterceptor);
383+
new GrpcFlagResolver(
384+
clientSecret, flagResolverManagedChannel, telemetryInterceptor, resolveDeadlineMs);
372385

373386
flagResolverClient = new FlagResolverClientImpl(flagResolver, telemetry);
374387

375388
final EventSenderEngine eventSenderEngine =
376-
new EventSenderEngineImpl(clientSecret, DEFAULT_CHANNEL, Instant::now);
389+
new EventSenderEngineImpl(
390+
clientSecret, DEFAULT_CHANNEL, Instant::now, eventSenderDeadlineMs);
377391
closer.register(flagResolverClient);
378392
closer.register(eventSenderEngine);
379393
return new RootInstance(

sdk-java/src/main/java/com/spotify/confidence/EventSenderEngineImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ class EventSenderEngineImpl implements EventSenderEngine {
6464
pollingThread.start();
6565
}
6666

67-
EventSenderEngineImpl(String clientSecret, ManagedChannel channel, Clock clock) {
67+
EventSenderEngineImpl(
68+
String clientSecret, ManagedChannel channel, Clock clock, int deadlineMillis) {
6869
this(
6970
DEFAULT_BATCH_SIZE,
70-
new GrpcEventUploader(clientSecret, clock, channel),
71+
new GrpcEventUploader(clientSecret, clock, channel, deadlineMillis),
7172
clock,
7273
DEFAULT_MAX_FLUSH_INTERVAL,
7374
DEFAULT_MAX_MEMORY_CONSUMPTION);

sdk-java/src/main/java/com/spotify/confidence/GrpcEventUploader.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,17 @@ class GrpcEventUploader implements EventUploader {
3131
private final ManagedChannel managedChannel;
3232
private final EventsServiceGrpc.EventsServiceFutureStub stub;
3333
private final Clock clock;
34+
private final int deadlineMillis;
3435

3536
private static final Logger log = org.slf4j.LoggerFactory.getLogger(GrpcEventUploader.class);
3637

37-
GrpcEventUploader(String clientSecret, Clock clock, ManagedChannel managedChannel) {
38+
GrpcEventUploader(
39+
String clientSecret, Clock clock, ManagedChannel managedChannel, int deadlineMillis) {
3840
this.clientSecret = clientSecret;
3941
this.managedChannel = managedChannel;
4042
this.stub = EventsServiceGrpc.newFutureStub(managedChannel);
4143
this.clock = clock;
44+
this.deadlineMillis = deadlineMillis;
4245
this.sdk =
4346
Sdk.newBuilder()
4447
.setId(SdkId.SDK_ID_JAVA_CONFIDENCE)
@@ -57,7 +60,7 @@ public CompletableFuture<Boolean> upload(List<Event> events) {
5760
.build();
5861

5962
return GrpcUtil.toCompletableFuture(
60-
stub.withDeadlineAfter(5, TimeUnit.SECONDS).publishEvents(request))
63+
stub.withDeadlineAfter(deadlineMillis, TimeUnit.MILLISECONDS).publishEvents(request))
6164
.thenApply(
6265
publishEventsResponse -> {
6366
final List<Event> eventsInRequest = request.getEventsList();

sdk-java/src/main/java/com/spotify/confidence/GrpcFlagResolver.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,19 @@ public class GrpcFlagResolver implements FlagResolver {
1515
private final Builder sdkBuilder = Sdk.newBuilder().setVersion(ConfidenceUtils.getSdkVersion());
1616

1717
private final FlagResolverServiceGrpc.FlagResolverServiceFutureStub stub;
18+
private final int deadlineMillis;
1819

1920
public GrpcFlagResolver(
2021
String clientSecret,
2122
ManagedChannel managedChannel,
22-
TelemetryClientInterceptor telemetryInterceptor) {
23+
TelemetryClientInterceptor telemetryInterceptor,
24+
int deadlineMillis) {
2325
if (Strings.isNullOrEmpty(clientSecret)) {
2426
throw new IllegalArgumentException("clientSecret must be a non-empty string.");
2527
}
2628
this.clientSecret = clientSecret;
2729
this.managedChannel = managedChannel;
30+
this.deadlineMillis = deadlineMillis;
2831
this.stub =
2932
FlagResolverServiceGrpc.newFutureStub(managedChannel)
3033
.withInterceptors(telemetryInterceptor);
@@ -33,7 +36,7 @@ public GrpcFlagResolver(
3336
public CompletableFuture<ResolveFlagsResponse> resolve(
3437
String flag, Struct context, Boolean isProvider) {
3538
return GrpcUtil.toCompletableFuture(
36-
stub.withDeadlineAfter(10, TimeUnit.SECONDS)
39+
stub.withDeadlineAfter(deadlineMillis, TimeUnit.MILLISECONDS)
3740
.resolveFlags(
3841
ResolveFlagsRequest.newBuilder()
3942
.setClientSecret(this.clientSecret)

sdk-java/src/test/java/com/spotify/confidence/ConfidenceIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void beforeEach() {
7878
telemetryInterceptor = new FakeTelemetryClientInterceptor(telemetry);
7979
final FlagResolverClientImpl flagResolver =
8080
new FlagResolverClientImpl(
81-
new GrpcFlagResolver("fake-secret", channel, telemetryInterceptor), telemetry);
81+
new GrpcFlagResolver("fake-secret", channel, telemetryInterceptor, 1_000), telemetry);
8282
confidence = Confidence.create(fakeEventSender, flagResolver, "");
8383
}
8484

@@ -477,7 +477,7 @@ public void resolveDoesNotContainHeaderWithTelemetryDataWhenDisabled() {
477477
new FakeTelemetryClientInterceptor(null);
478478
final FlagResolverClientImpl flagResolver =
479479
new FlagResolverClientImpl(
480-
new GrpcFlagResolver("fake-secret", channel, nullTelemetryInterceptor));
480+
new GrpcFlagResolver("fake-secret", channel, nullTelemetryInterceptor, 1_000));
481481
confidence = Confidence.create(fakeEventSender, flagResolver, "clientKey");
482482

483483
mockSampleResponse();

sdk-java/src/test/java/com/spotify/confidence/GrpcEventUploaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void setUp() throws IOException {
5454
fakeClock.setCurrentTimeSeconds(1337);
5555

5656
// Create a client that uses the channel
57-
uploader = new GrpcEventUploader("my-client-secret", fakeClock, channel);
57+
uploader = new GrpcEventUploader("my-client-secret", fakeClock, channel, 5_000);
5858
}
5959

6060
@AfterEach

0 commit comments

Comments
 (0)