Clear loader cache in Mutation#after_resolve #141
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
resolve
method of a Mutation can make changes to the DB thatinvalidate any cached Loader results. So, the cache should be cleared
after the resolve method has completed, and before any nested fields on
the Mutation query are resolved.
In our codebase, this causes authorization errors if the Mutation
removes a member from a list/connection, and the client requests that
same list field, on the same object, as part of the mutation response. Since the Loader
cached the pre-mutation result, the wrong data is returned to the
client.
Note: At first, I was expecting the usage of
::Promise.sync
in theresolve
method to handle this case, but when I step through the code with puts/byebug, I observe that theauthorized?
orresolve
methods of the mutation are not called at all until after thePromise.sync
call is complete. I feel its possible im misunderstanding something.