-
Notifications
You must be signed in to change notification settings - Fork 1.2k
GQLGW-5297-optimise-incremental-part-execution-for-defer-requests #4174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GQLGW-5297-optimise-incremental-part-execution-for-defer-requests #4174
Conversation
| initialResult.incrementalItemPublisher.subscribe(sub) | ||
|
|
||
| then: | ||
| Awaitility.await().untilTrue(sub.isDone()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Needs an assert on the contents of the Publisher
src/test/groovy/graphql/execution/incremental/DeferExecutionSupportIntegrationTest.groovy
Show resolved
Hide resolved
| && deferredExecutionSupport.deferredFieldsCount() > 0 | ||
| && executionContext.getGraphQLContext().getBoolean(IncrementalExecutionContextKeys.ENABLE_EAGER_DEFER_START, false)) { | ||
|
|
||
| executionContext.getIncrementalCallState().startDeferredCalls(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This call here is only need as a side effect to create the memoizing supplier (of the Publisher)
I think we should invent a new method that does that and hides the side effect
executionContext.getIncrementalCallState().startEarlyDraining();
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hang on you have that - startDrainingNow() and it calls publisher.get()
I dont think executionContext.getIncrementalCallState().startDeferredCalls(); is needed
|
|
||
| } | ||
|
|
||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to create a new entry in the unusual config - lets put it in
graphql.GraphQLUnusualConfiguration.IncrementalSupportConfig
/**
* This controls whether @defer field execution starts as early as possible.
*/
@ExperimentalApi
public IncrementalSupportConfig enableEarlyFieldExecution(boolean enable) {
contextConfig.put(YOUR_KEY_HERE, enable);
return this;
}
| } | ||
|
|
||
| public void startDrainingNow() { | ||
| startDeferredCalls(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no need to call start Deferred calls as it just creates the publisher
This is to optimise defer execution for incremental results to begin processing as soon as the first incremental call is detected rather than on completion of the initial result.