-
Notifications
You must be signed in to change notification settings - Fork 10.3k
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
fix(gatsby): fix incorrect intersection of filtered results #30594
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pieh
reviewed
Mar 31, 2021
Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>
…vladar/fix-broken-filters
pieh
reviewed
Apr 1, 2021
Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>
pieh
approved these changes
Apr 1, 2021
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.
LGTM, thanks so much for diving in this problem, reverse engineering how problem could occur and finding fix for it!
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
vladar
added a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
vladar
added a commit
that referenced
this pull request
Apr 1, 2021
…30626) * add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23) Co-authored-by: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
Published in |
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
* add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23)
pieh
pushed a commit
that referenced
this pull request
Apr 1, 2021
…30619) * add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> (cherry picked from commit e432c23) Co-authored-by: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>
This was referenced Jul 16, 2021
pragmaticpat
pushed a commit
to pragmaticpat/gatsby
that referenced
this pull request
Apr 28, 2022
…#30594) * add failing test * actually failing test * make test independent of other tests * add invariant for filter intersection assumptions * add failing integration test * fix test 🤦 * actually fix this heisenbug * update redux state snapshot * perf: mutate status state directly Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> * only newly created nodes should get a counter * tweak comment Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com> Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
This PR fixes a bug with query filters that occurs in a very edge case. All of the following must be true in order for you to hit this bug:
touchNode
(such asgatsby-source-contentful
,gatsby-source-contentstack
, etc)If all of the above is true - you will see this issue.
The problem is that we rely on
node.internal.counter
to perform fast intersections of filtered results here:gatsby/packages/gatsby/src/redux/nodes.ts
Lines 1099 to 1117 in f628c38
And this
node.internal.counter
is reset when we restart the gatsby process:gatsby/packages/gatsby/src/redux/actions/public.js
Lines 617 to 618 in f628c38
So after process restart, multiple nodes may end up with the same counter and mess with filter results intersection.