Skip to content

Commit 0ee7dda

Browse files
committed
Allow async timeout to be configured #184
1 parent 31aaebf commit 0ee7dda

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLInvoker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class GraphQLInvoker {
1919

2020
private final GraphQLBuilder graphQLBuilder;
2121
private final BatchedDataLoaderGraphQLBuilder batchedDataLoaderGraphQLBuilder;
22-
private GraphQLInvokerProxy proxy = GraphQL::executeAsync;
22+
private final GraphQLInvokerProxy proxy = GraphQL::executeAsync;
2323

2424
public CompletableFuture<ExecutionResult> executeAsync(GraphQLSingleInvocationInput invocationInput) {
2525
GraphQL graphQL = graphQLBuilder.build(invocationInput.getSchema());

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java

+1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ public String executeQuery(String query) {
130130
private void doRequestAsync(HttpServletRequest request, HttpServletResponse response, HttpRequestHandler handler) {
131131
if (configuration.isAsyncServletModeEnabled()) {
132132
AsyncContext asyncContext = request.startAsync(request, response);
133+
asyncContext.setTimeout(configuration.getAsyncTimeout());
133134
HttpServletRequest asyncRequest = (HttpServletRequest) asyncContext.getRequest();
134135
HttpServletResponse asyncResponse = (HttpServletResponse) asyncContext.getResponse();
135136
configuration.getAsyncExecutor().execute(() -> doRequest(asyncRequest, asyncResponse, handler, asyncContext));

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.concurrent.Executor;
2121
import java.util.concurrent.Executors;
2222
import java.util.function.Supplier;
23+
import lombok.Getter;
2324

2425
public class GraphQLConfiguration {
2526

@@ -32,12 +33,14 @@ public class GraphQLConfiguration {
3233
private final boolean asyncServletModeEnabled;
3334
private final Executor asyncExecutor;
3435
private final long subscriptionTimeout;
36+
@Getter
37+
private final long asyncTimeout;
3538
private final ContextSetting contextSetting;
3639

3740
private GraphQLConfiguration(GraphQLInvocationInputFactory invocationInputFactory,
3841
GraphQLQueryInvoker queryInvoker,
3942
GraphQLObjectMapper objectMapper, List<GraphQLServletListener> listeners, boolean asyncServletModeEnabled,
40-
Executor asyncExecutor, long subscriptionTimeout, ContextSetting contextSetting,
43+
Executor asyncExecutor, long subscriptionTimeout, long asyncTimeout, ContextSetting contextSetting,
4144
Supplier<BatchInputPreProcessor> batchInputPreProcessor) {
4245
this.invocationInputFactory = invocationInputFactory;
4346
this.queryInvoker = queryInvoker;
@@ -47,6 +50,7 @@ private GraphQLConfiguration(GraphQLInvocationInputFactory invocationInputFactor
4750
this.asyncServletModeEnabled = asyncServletModeEnabled;
4851
this.asyncExecutor = asyncExecutor;
4952
this.subscriptionTimeout = subscriptionTimeout;
53+
this.asyncTimeout = asyncTimeout;
5054
this.contextSetting = contextSetting;
5155
this.batchInputPreProcessor = batchInputPreProcessor;
5256
}
@@ -119,8 +123,9 @@ public static class Builder {
119123
private boolean asyncServletModeEnabled = false;
120124
private Executor asyncExecutor = Executors.newCachedThreadPool(new GraphQLThreadFactory());
121125
private long subscriptionTimeout = 0;
126+
private long asyncTimeout = 30;
122127
private ContextSetting contextSetting = ContextSetting.PER_QUERY_WITH_INSTRUMENTATION;
123-
private Supplier<BatchInputPreProcessor> batchInputPreProcessorSupplier = () -> new NoOpBatchInputPreProcessor();
128+
private Supplier<BatchInputPreProcessor> batchInputPreProcessorSupplier = NoOpBatchInputPreProcessor::new;
124129

125130
private Builder(GraphQLInvocationInputFactory.Builder invocationInputFactoryBuilder) {
126131
this.invocationInputFactoryBuilder = invocationInputFactoryBuilder;
@@ -178,6 +183,11 @@ public Builder with(long subscriptionTimeout) {
178183
return this;
179184
}
180185

186+
public Builder asyncTimeout(long asyncTimeout) {
187+
this.asyncTimeout = asyncTimeout;
188+
return this;
189+
}
190+
181191
public Builder with(ContextSetting contextSetting) {
182192
if (contextSetting != null) {
183193
this.contextSetting = contextSetting;
@@ -208,6 +218,7 @@ public GraphQLConfiguration build() {
208218
asyncServletModeEnabled,
209219
asyncExecutor,
210220
subscriptionTimeout,
221+
asyncTimeout,
211222
contextSetting,
212223
batchInputPreProcessorSupplier
213224
);

0 commit comments

Comments
 (0)