Skip to content

Commit 54bb6c2

Browse files
timward60Copilot
andcommitted
Fix dataloader dispatch in @defer with multiple deferred fragments
Use mergedFields.size() (per-fragment field count) instead of deferredFields.size() (total across all fragments) when constructing AlternativeCallContext. The inflated count prevented dispatch strategies from ever triggering dispatch since each fragment only fetches its own fields. Fixes the bug introduced in graphql-java#3980. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent d9c873d commit 54bb6c2

1 file changed

Lines changed: 1 addition & 2 deletions

File tree

‎src/main/java/graphql/execution/incremental/DeferredExecutionSupport.java‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,8 @@ public Set<IncrementalCall<? extends IncrementalPayload>> createCalls() {
128128

129129
private DeferredFragmentCall createDeferredFragmentCall(DeferredExecution deferredExecution) {
130130
int level = parameters.getPath().getLevel() + 1;
131-
AlternativeCallContext alternativeCallContext = new AlternativeCallContext(level, deferredFields.size());
132-
133131
List<MergedField> mergedFields = deferredExecutionToFields.get(deferredExecution);
132+
AlternativeCallContext alternativeCallContext = new AlternativeCallContext(level, mergedFields.size());
134133

135134
List<Supplier<CompletableFuture<DeferredFragmentCall.FieldWithExecutionResult>>> calls = FpKit.arrayListSizedTo(mergedFields);
136135
for (MergedField currentField : mergedFields) {

0 commit comments

Comments
 (0)