@@ -44,7 +44,7 @@ public interface DeferredExecutionSupport {
44
44
45
45
List <String > getNonDeferredFieldNames (List <String > allFieldNames );
46
46
47
- Set <IncrementalCall <? extends IncrementalPayload >> createCalls ();
47
+ Set <IncrementalCall <? extends IncrementalPayload >> createCalls (ExecutionStrategyParameters executionStrategyParameters );
48
48
49
49
DeferredExecutionSupport NOOP = new DeferredExecutionSupport .NoOp ();
50
50
@@ -105,19 +105,19 @@ public List<String> getNonDeferredFieldNames(List<String> allFieldNames) {
105
105
}
106
106
107
107
@ Override
108
- public Set <IncrementalCall <? extends IncrementalPayload >> createCalls () {
108
+ public Set <IncrementalCall <? extends IncrementalPayload >> createCalls (ExecutionStrategyParameters executionStrategyParameters ) {
109
109
return deferredExecutionToFields .keySet ().stream ()
110
- .map (this :: createDeferredFragmentCall )
110
+ .map (deferredExecution -> this . createDeferredFragmentCall ( deferredExecution , executionStrategyParameters ) )
111
111
.collect (Collectors .toSet ());
112
112
}
113
113
114
- private DeferredFragmentCall createDeferredFragmentCall (DeferredExecution deferredExecution ) {
114
+ private DeferredFragmentCall createDeferredFragmentCall (DeferredExecution deferredExecution , ExecutionStrategyParameters executionStrategyParameters ) {
115
115
DeferredCallContext deferredCallContext = new DeferredCallContext ();
116
116
117
117
List <MergedField > mergedFields = deferredExecutionToFields .get (deferredExecution );
118
118
119
119
List <Supplier <CompletableFuture <DeferredFragmentCall .FieldWithExecutionResult >>> calls = mergedFields .stream ()
120
- .map (currentField -> this .createResultSupplier (currentField , deferredCallContext ))
120
+ .map (currentField -> this .createResultSupplier (currentField , deferredCallContext , executionStrategyParameters ))
121
121
.collect (Collectors .toList ());
122
122
123
123
return new DeferredFragmentCall (
@@ -130,7 +130,8 @@ private DeferredFragmentCall createDeferredFragmentCall(DeferredExecution deferr
130
130
131
131
private Supplier <CompletableFuture <DeferredFragmentCall .FieldWithExecutionResult >> createResultSupplier (
132
132
MergedField currentField ,
133
- DeferredCallContext deferredCallContext
133
+ DeferredCallContext deferredCallContext ,
134
+ ExecutionStrategyParameters executionStrategyParameters
134
135
) {
135
136
Map <String , MergedField > fields = new LinkedHashMap <>();
136
137
fields .put (currentField .getResultKey (), currentField );
@@ -149,7 +150,6 @@ private Supplier<CompletableFuture<DeferredFragmentCall.FieldWithExecutionResult
149
150
150
151
Instrumentation instrumentation = executionContext .getInstrumentation ();
151
152
152
- executionContext .getDataLoaderDispatcherStrategy ().deferredField (executionContext , currentField );
153
153
instrumentation .beginDeferredField (executionContext .getInstrumentationState ());
154
154
155
155
return dfCache .computeIfAbsent (
@@ -160,12 +160,14 @@ private Supplier<CompletableFuture<DeferredFragmentCall.FieldWithExecutionResult
160
160
CompletableFuture <FieldValueInfo > fieldValueResult = resolveFieldWithInfoFn
161
161
.apply (executionContext , callParameters );
162
162
163
- // Create a reference to the CompletableFuture that resolves an ExecutionResult
164
- // so we can pass it to the Instrumentation "onDispatched" callback.
165
163
CompletableFuture <ExecutionResult > executionResultCF = fieldValueResult
166
- .thenCompose (fvi -> fvi
167
- .getFieldValueFuture ()
168
- .thenApply (fv -> ExecutionResultImpl .newExecutionResult ().data (fv ).build ())
164
+ .thenCompose (fvi -> {
165
+ executionContext .getDataLoaderDispatcherStrategy ().executeDeferredOnFieldValueInfo (fvi , executionStrategyParameters );
166
+
167
+ return fvi
168
+ .getFieldValueFuture ()
169
+ .thenApply (fv -> ExecutionResultImpl .newExecutionResult ().data (fv ).build ());
170
+ }
169
171
);
170
172
171
173
return executionResultCF
@@ -199,7 +201,7 @@ public List<String> getNonDeferredFieldNames(List<String> allFieldNames) {
199
201
}
200
202
201
203
@ Override
202
- public Set <IncrementalCall <? extends IncrementalPayload >> createCalls () {
204
+ public Set <IncrementalCall <? extends IncrementalPayload >> createCalls (ExecutionStrategyParameters executionStrategyParameters ) {
203
205
return Collections .emptySet ();
204
206
}
205
207
}
0 commit comments