Skip to content

Commit 510a988

Browse files
authored
Entity Service and Config Service Configurable Timeouts (#92)
* Entity service and config service configurable timeouts * .synk update expiry date * Fix typo * Reuse optionallyGet in the implementation of getTimeoutOrFallback * chore: submodule ref update
1 parent 2cdb158 commit 510a988

File tree

5 files changed

+47
-13
lines changed

5 files changed

+47
-13
lines changed

.snyk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ ignore:
55
SNYK-JAVA-IONETTY-1042268:
66
- '*':
77
reason: No replacement available
8-
expires: 2021-06-30T00:00:00.000Z
8+
expires: 2021-09-01T00:00:00.000Z
99
patch: {}
1010

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package org.hypertrace.graphql.config;
22

3+
import java.time.Duration;
34
import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig;
45

56
public interface HypertraceGraphQlServiceConfig extends GraphQlServiceConfig {
67
String getEntityServiceHost();
78

89
int getEntityServicePort();
910

11+
Duration getEntityServiceTimeout();
12+
1013
String getConfigServiceHost();
1114

1215
int getConfigServicePort();
16+
17+
Duration getConfigServiceTimeout();
1318
}

hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
@Value
1111
class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
1212

13+
private static final Long DEFAULT_CLIENT_TIMEOUT_SECONDS = 10L;
14+
1315
private static final String SERVICE_NAME_CONFIG = "service.name";
1416
private static final String SERVICE_PORT_CONFIG = "service.port";
1517

@@ -22,16 +24,19 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
2224

2325
private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host";
2426
private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port";
27+
private static final String ATTRIBUTE_SERVICE_CLIENT_TIMEOUT = "attribute.service.timeout";
2528

2629
private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host";
2730
private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port";
2831
private static final String GATEWAY_SERVICE_CLIENT_TIMEOUT = "gateway.service.timeout";
2932

3033
private static final String ENTITY_SERVICE_HOST_PROPERTY = "entity.service.host";
3134
private static final String ENTITY_SERVICE_PORT_PROPERTY = "entity.service.port";
35+
private static final String ENTITY_SERVICE_CLIENT_TIMEOUT = "entity.service.timeout";
3236

3337
private static final String CONFIG_SERVICE_HOST_PROPERTY = "config.service.host";
3438
private static final String CONFIG_SERVICE_PORT_PROPERTY = "config.service.port";
39+
private static final String CONFIG_SERVICE_CLIENT_TIMEOUT = "config.service.timeout";
3540

3641
String serviceName;
3742
int servicePort;
@@ -41,13 +46,16 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
4146
int maxIoThreads;
4247
String attributeServiceHost;
4348
int attributeServicePort;
49+
Duration attributeServiceTimeout;
4450
String gatewayServiceHost;
4551
int gatewayServicePort;
4652
Duration gatewayServiceTimeout;
4753
String entityServiceHost;
4854
int entityServicePort;
55+
Duration entityServiceTimeout;
4956
String configServiceHost;
5057
int configServicePort;
58+
Duration configServiceTimeout;
5159

5260
DefaultGraphQlServiceConfig(Config untypedConfig) {
5361
this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG);
@@ -65,11 +73,24 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
6573
this.entityServicePort = untypedConfig.getInt(ENTITY_SERVICE_PORT_PROPERTY);
6674
this.configServiceHost = untypedConfig.getString(CONFIG_SERVICE_HOST_PROPERTY);
6775
this.configServicePort = untypedConfig.getInt(CONFIG_SERVICE_PORT_PROPERTY);
68-
// fallback timeout: 10s
76+
6977
this.gatewayServiceTimeout =
70-
untypedConfig.hasPath(GATEWAY_SERVICE_CLIENT_TIMEOUT)
71-
? untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT)
72-
: Duration.ofSeconds(10);
78+
getSuppliedDurationOrFallback(
79+
() -> untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT));
80+
this.attributeServiceTimeout =
81+
getSuppliedDurationOrFallback(
82+
() -> untypedConfig.getDuration(ATTRIBUTE_SERVICE_CLIENT_TIMEOUT));
83+
this.configServiceTimeout =
84+
getSuppliedDurationOrFallback(
85+
() -> untypedConfig.getDuration(CONFIG_SERVICE_CLIENT_TIMEOUT));
86+
this.entityServiceTimeout =
87+
getSuppliedDurationOrFallback(
88+
() -> untypedConfig.getDuration(ENTITY_SERVICE_CLIENT_TIMEOUT));
89+
}
90+
91+
private Duration getSuppliedDurationOrFallback(Supplier<Duration> durationSupplier) {
92+
return optionallyGet(durationSupplier)
93+
.orElse(Duration.ofSeconds(DEFAULT_CLIENT_TIMEOUT_SECONDS));
7394
}
7495

7596
private <T> Optional<T> optionallyGet(Supplier<T> valueSupplier) {

hypertrace-graphql-spaces-schema/src/main/java/org/hypertrace/graphql/spaces/dao/ConfigServiceSpacesConfigDao.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package org.hypertrace.graphql.spaces.dao;
22

3-
import static java.util.concurrent.TimeUnit.SECONDS;
4-
53
import io.grpc.CallCredentials;
64
import io.reactivex.rxjava3.core.Single;
5+
import java.util.concurrent.TimeUnit;
76
import javax.inject.Inject;
87
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
98
import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder;
@@ -19,11 +18,11 @@
1918

2019
class ConfigServiceSpacesConfigDao implements SpacesConfigDao {
2120

22-
private static final int DEFAULT_DEADLINE_SEC = 10;
2321
private final SpacesConfigServiceFutureStub spaceConfigServiceStub;
2422
private final GraphQlGrpcContextBuilder grpcContextBuilder;
2523
private final SpaceConfigRulesRequestConverter requestConverter;
2624
private final SpaceConfigRulesResponseConverter responseConverter;
25+
private final HypertraceGraphQlServiceConfig serviceConfig;
2726

2827
@Inject
2928
ConfigServiceSpacesConfigDao(
@@ -36,6 +35,7 @@ class ConfigServiceSpacesConfigDao implements SpacesConfigDao {
3635
this.grpcContextBuilder = grpcContextBuilder;
3736
this.requestConverter = requestConverter;
3837
this.responseConverter = responseConverter;
38+
this.serviceConfig = serviceConfig;
3939

4040
this.spaceConfigServiceStub =
4141
SpacesConfigServiceGrpc.newFutureStub(
@@ -52,7 +52,9 @@ public Single<SpaceConfigRuleResultSet> getAllRules(GraphQlRequestContext reques
5252
.callInContext(
5353
() ->
5454
this.spaceConfigServiceStub
55-
.withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS)
55+
.withDeadlineAfter(
56+
serviceConfig.getConfigServiceTimeout().toMillis(),
57+
TimeUnit.MILLISECONDS)
5658
.getRules(this.requestConverter.convertGetRequest())))
5759
.flatMap(this.responseConverter::convertGetResponse);
5860
}
@@ -65,7 +67,9 @@ public Single<SpaceConfigRule> createRule(SpaceConfigRuleCreationRequest request
6567
.callInContext(
6668
() ->
6769
this.spaceConfigServiceStub
68-
.withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS)
70+
.withDeadlineAfter(
71+
serviceConfig.getConfigServiceTimeout().toMillis(),
72+
TimeUnit.MILLISECONDS)
6973
.createRule(this.requestConverter.convertCreationRequest(request))))
7074
.flatMap(this.responseConverter::convertRule);
7175
}
@@ -78,7 +82,9 @@ public Single<SpaceConfigRule> updateRule(SpaceConfigRuleUpdateRequest request)
7882
.callInContext(
7983
() ->
8084
this.spaceConfigServiceStub
81-
.withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS)
85+
.withDeadlineAfter(
86+
serviceConfig.getConfigServiceTimeout().toMillis(),
87+
TimeUnit.MILLISECONDS)
8288
.updateRule(this.requestConverter.convertUpdateRequest(request))))
8389
.flatMap(this.responseConverter::convertRule);
8490
}
@@ -91,7 +97,9 @@ public Single<Boolean> deleteRule(SpaceConfigRuleDeleteRequest request) {
9197
.callInContext(
9298
() ->
9399
this.spaceConfigServiceStub
94-
.withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS)
100+
.withDeadlineAfter(
101+
serviceConfig.getConfigServiceTimeout().toMillis(),
102+
TimeUnit.MILLISECONDS)
95103
.deleteRule(this.requestConverter.convertDeleteRequest(request))))
96104
.flatMap(unusedResponse -> this.responseConverter.buildDeleteResponse());
97105
}

0 commit comments

Comments
 (0)