Skip to content

Commit dad2e95

Browse files
committed
remove deferred support
1 parent 10eeacc commit dad2e95

16 files changed

Lines changed: 6 additions & 1178 deletions

src/main/java/graphql/execution/AsyncExecutionStrategy.java

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package graphql.execution;
22

33
import graphql.ExecutionResult;
4-
import graphql.execution.defer.DeferSupport;
5-
import graphql.execution.defer.DeferredCall;
6-
import graphql.execution.defer.DeferredErrorSupport;
74
import graphql.execution.instrumentation.DeferredFieldInstrumentationContext;
85
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
96
import graphql.execution.instrumentation.Instrumentation;
@@ -13,16 +10,12 @@
1310
import graphql.schema.GraphQLObjectType;
1411

1512
import java.util.ArrayList;
16-
import java.util.LinkedHashMap;
1713
import java.util.List;
18-
import java.util.Map;
1914
import java.util.concurrent.CompletableFuture;
2015
import java.util.function.BiConsumer;
2116
import java.util.function.Supplier;
2217
import java.util.stream.Collectors;
2318

24-
import static graphql.execution.MergedSelectionSet.newMergedSelectionSet;
25-
2619
/**
2720
* The standard graphql execution strategy that runs fields asynchronously non-blocking.
2821
*/
@@ -65,14 +58,7 @@ public CompletableFuture<ExecutionResult> execute(ExecutionContext executionCont
6558
.transform(builder -> builder.field(currentField).path(fieldPath).parent(parameters));
6659

6760
resolvedFields.add(fieldName);
68-
CompletableFuture<FieldValueInfo> future;
69-
70-
if (isDeferred(executionContext, newParameters, currentField)) {
71-
executionStrategyCtx.onDeferredField(currentField);
72-
future = resolveFieldWithInfoToNull(executionContext, newParameters);
73-
} else {
74-
future = resolveFieldWithInfo(executionContext, newParameters);
75-
}
61+
CompletableFuture<FieldValueInfo> future = resolveFieldWithInfo(executionContext, newParameters);
7662
futures.add(future);
7763
}
7864
CompletableFuture<ExecutionResult> overallResult = new CompletableFuture<>();
@@ -99,33 +85,6 @@ public CompletableFuture<ExecutionResult> execute(ExecutionContext executionCont
9985
return overallResult;
10086
}
10187

102-
private boolean isDeferred(ExecutionContext executionContext, ExecutionStrategyParameters parameters, MergedField currentField) {
103-
DeferSupport deferSupport = executionContext.getDeferSupport();
104-
if (deferSupport.checkForDeferDirective(currentField, executionContext.getVariables())) {
105-
DeferredErrorSupport errorSupport = new DeferredErrorSupport();
106-
107-
// with a deferred field we are really resetting where we execute from, that is from this current field onwards
108-
Map<String, MergedField> fields = new LinkedHashMap<>();
109-
fields.put(currentField.getName(), currentField);
110-
111-
ExecutionStrategyParameters callParameters = parameters.transform(builder ->
112-
{
113-
MergedSelectionSet mergedSelectionSet = newMergedSelectionSet().subFields(fields).build();
114-
builder.deferredErrorSupport(errorSupport)
115-
.field(currentField)
116-
.fields(mergedSelectionSet)
117-
.parent(null) // this is a break in the parent -> child chain - its a new start effectively
118-
.listSize(0)
119-
.currentListIndex(0);
120-
}
121-
);
122-
123-
DeferredCall call = new DeferredCall(parameters.getPath(), deferredExecutionResult(executionContext, callParameters), errorSupport);
124-
deferSupport.enqueue(call);
125-
return true;
126-
}
127-
return false;
128-
}
12988

13089
@SuppressWarnings("FutureReturnValueIgnored")
13190
private Supplier<CompletableFuture<ExecutionResult>> deferredExecutionResult(ExecutionContext executionContext, ExecutionStrategyParameters parameters) {

src/main/java/graphql/execution/Execution.java

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package graphql.execution;
22

33

4-
import graphql.DeferredExecutionResult;
54
import graphql.ExecutionInput;
65
import graphql.ExecutionResult;
76
import graphql.ExecutionResultImpl;
8-
import graphql.GraphQL;
97
import graphql.GraphQLError;
108
import graphql.Internal;
11-
import graphql.execution.defer.DeferSupport;
129
import graphql.execution.instrumentation.Instrumentation;
1310
import graphql.execution.instrumentation.InstrumentationContext;
1411
import graphql.execution.instrumentation.InstrumentationState;
@@ -22,7 +19,6 @@
2219
import graphql.schema.GraphQLObjectType;
2320
import graphql.schema.GraphQLSchema;
2421
import graphql.util.LogKit;
25-
import org.reactivestreams.Publisher;
2622
import org.slf4j.Logger;
2723

2824
import java.util.Collections;
@@ -183,27 +179,9 @@ private CompletableFuture<ExecutionResult> executeOperation(ExecutionContext exe
183179

184180
result = result.whenComplete(executeOperationCtx::onCompleted);
185181

186-
return deferSupport(executionContext, result);
182+
return result;
187183
}
188184

189-
/*
190-
* Adds the deferred publisher if its needed at the end of the query. This is also a good time for the deferred code to start running
191-
*/
192-
private CompletableFuture<ExecutionResult> deferSupport(ExecutionContext executionContext, CompletableFuture<ExecutionResult> result) {
193-
return result.thenApply(er -> {
194-
DeferSupport deferSupport = executionContext.getDeferSupport();
195-
if (deferSupport.isDeferDetected()) {
196-
// we start the rest of the query now to maximize throughput. We have the initial important results
197-
// and now we can start the rest of the calls as early as possible (even before some one subscribes)
198-
Publisher<DeferredExecutionResult> publisher = deferSupport.startDeferredCalls();
199-
return ExecutionResultImpl.newExecutionResult().from(er)
200-
.addExtension(GraphQL.DEFERRED_RESULTS, publisher)
201-
.build();
202-
}
203-
return er;
204-
});
205-
206-
}
207185

208186
private GraphQLObjectType getOperationRootType(GraphQLSchema graphQLSchema, OperationDefinition operationDefinition) {
209187
OperationDefinition.Operation operation = operationDefinition.getOperation();

src/main/java/graphql/execution/ExecutionContext.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33

44
import graphql.ExecutionInput;
55
import graphql.GraphQLError;
6-
import graphql.Internal;
76
import graphql.PublicApi;
87
import graphql.cachecontrol.CacheControl;
9-
import graphql.execution.defer.DeferSupport;
108
import graphql.execution.instrumentation.Instrumentation;
119
import graphql.execution.instrumentation.InstrumentationState;
1210
import graphql.language.Document;
@@ -47,7 +45,6 @@ public class ExecutionContext {
4745
private final DataLoaderRegistry dataLoaderRegistry;
4846
private final CacheControl cacheControl;
4947
private final Locale locale;
50-
private final DeferSupport deferSupport = new DeferSupport();
5148
private final ValueUnboxer valueUnboxer;
5249
private final ExecutionInput executionInput;
5350

@@ -198,10 +195,6 @@ public ExecutionStrategy getSubscriptionStrategy() {
198195
return subscriptionStrategy;
199196
}
200197

201-
public DeferSupport getDeferSupport() {
202-
return deferSupport;
203-
}
204-
205198
/**
206199
* This helps you transform the current ExecutionContext object into another one by starting a builder with all
207200
* the current values and allows you to transform it how you want.

src/main/java/graphql/execution/ExecutionStrategy.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,6 @@ private void handleFetchingException(ExecutionContext executionContext,
345345
DataFetcherExceptionHandlerResult handlerResult = dataFetcherExceptionHandler.onException(handlerParameters);
346346
handlerResult.getErrors().forEach(executionContext::addError);
347347

348-
parameters.deferredErrorSupport().onFetchingException(parameters, e);
349348
}
350349

351350
/**
@@ -461,7 +460,6 @@ private void handleUnresolvedTypeProblem(ExecutionContext context, ExecutionStra
461460
logNotSafe.warn(error.getMessage(), e);
462461
context.addError(error);
463462

464-
parameters.deferredErrorSupport().onError(error);
465463
}
466464

467465
private CompletableFuture<ExecutionResult> completeValueForNull(ExecutionStrategyParameters parameters) {
@@ -669,7 +667,6 @@ private Object handleCoercionProblem(ExecutionContext context, ExecutionStrategy
669667
logNotSafe.warn(error.getMessage(), e);
670668
context.addError(error);
671669

672-
parameters.deferredErrorSupport().onError(error);
673670

674671
return null;
675672
}
@@ -708,7 +705,6 @@ private void handleTypeMismatchProblem(ExecutionContext context, ExecutionStrate
708705
logNotSafe.warn("{} got {}", error.getMessage(), result.getClass());
709706
context.addError(error);
710707

711-
parameters.deferredErrorSupport().onError(error);
712708
}
713709

714710

src/main/java/graphql/execution/ExecutionStrategyParameters.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import graphql.Assert;
44
import graphql.PublicApi;
5-
import graphql.execution.defer.DeferredErrorSupport;
65

76
import java.util.Map;
87
import java.util.function.Consumer;
@@ -25,7 +24,6 @@ public class ExecutionStrategyParameters {
2524
private final int listSize;
2625
private final int currentListIndex;
2726
private final ExecutionStrategyParameters parent;
28-
private final DeferredErrorSupport deferredErrorSupport;
2927

3028
private ExecutionStrategyParameters(ExecutionStepInfo executionStepInfo,
3129
Object source,
@@ -37,8 +35,7 @@ private ExecutionStrategyParameters(ExecutionStepInfo executionStepInfo,
3735
MergedField currentField,
3836
int listSize,
3937
int currentListIndex,
40-
ExecutionStrategyParameters parent,
41-
DeferredErrorSupport deferredErrorSupport) {
38+
ExecutionStrategyParameters parent) {
4239

4340
this.executionStepInfo = assertNotNull(executionStepInfo, () -> "executionStepInfo is null");
4441
this.localContext = localContext;
@@ -51,7 +48,6 @@ private ExecutionStrategyParameters(ExecutionStepInfo executionStepInfo,
5148
this.listSize = listSize;
5249
this.currentListIndex = currentListIndex;
5350
this.parent = parent;
54-
this.deferredErrorSupport = deferredErrorSupport;
5551
}
5652

5753
public ExecutionStepInfo getExecutionStepInfo() {
@@ -94,10 +90,6 @@ public ExecutionStrategyParameters getParent() {
9490
return parent;
9591
}
9692

97-
public DeferredErrorSupport deferredErrorSupport() {
98-
return deferredErrorSupport;
99-
}
100-
10193
/**
10294
* This returns the current field in its query representations.
10395
*
@@ -139,7 +131,6 @@ public static class Builder {
139131
int listSize;
140132
int currentListIndex;
141133
ExecutionStrategyParameters parent;
142-
DeferredErrorSupport deferredErrorSupport = new DeferredErrorSupport();
143134

144135
/**
145136
* @see ExecutionStrategyParameters#newParameters()
@@ -158,7 +149,6 @@ private Builder(ExecutionStrategyParameters oldParameters) {
158149
this.arguments = oldParameters.arguments;
159150
this.nonNullableFieldValidator = oldParameters.nonNullableFieldValidator;
160151
this.currentField = oldParameters.currentField;
161-
this.deferredErrorSupport = oldParameters.deferredErrorSupport;
162152
this.path = oldParameters.path;
163153
this.parent = oldParameters.parent;
164154
this.listSize = oldParameters.listSize;
@@ -225,13 +215,9 @@ public Builder parent(ExecutionStrategyParameters parent) {
225215
return this;
226216
}
227217

228-
public Builder deferredErrorSupport(DeferredErrorSupport deferredErrorSupport) {
229-
this.deferredErrorSupport = deferredErrorSupport;
230-
return this;
231-
}
232218

233219
public ExecutionStrategyParameters build() {
234-
return new ExecutionStrategyParameters(executionStepInfo, source, localContext, fields, arguments, nonNullableFieldValidator, path, currentField, listSize, currentListIndex, parent, deferredErrorSupport);
220+
return new ExecutionStrategyParameters(executionStepInfo, source, localContext, fields, arguments, nonNullableFieldValidator, path, currentField, listSize, currentListIndex, parent);
235221
}
236222
}
237223
}

src/main/java/graphql/execution/defer/DeferSupport.java

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/main/java/graphql/execution/defer/DeferredCall.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)