Skip to content

Do not invalidate the entity record during optimistic update in saveEntityRecord#26627

Merged
adamziel merged 1 commit into
masterfrom
update/avoid-invalidation-during-update
Nov 3, 2020
Merged

Do not invalidate the entity record during optimistic update in saveEntityRecord#26627
adamziel merged 1 commit into
masterfrom
update/avoid-invalidation-during-update

Conversation

@adamziel
Copy link
Copy Markdown
Contributor

@adamziel adamziel commented Nov 2, 2020

Description

As seen in #26325, invalidating the cache during an optimistic update may cause a GET request in the next tick. When that GET is resolved, it will update the state. If the timing lines up badly, it will overwrite the results of the POST. This PR flips the invalidateCache argument to false to prevent this race condition from happening. The GET will be triggered only after the POST/PUT request is finished (successfully or not).

Related to #26325

How has this been tested?

  1. Confirm all tests passed.
  2. Go to the widgets editor, click save, confirm all the GET requests are started only after the POST/PUT is finished.

Screenshots

Types of changes

Bug fix (non-breaking change which fixes an issue)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@adamziel adamziel added the [Package] Core data /packages/core-data label Nov 2, 2020
@adamziel adamziel requested a review from youknowriad November 2, 2020 12:35
@adamziel adamziel requested a review from nerrad as a code owner November 2, 2020 12:35
@adamziel adamziel self-assigned this Nov 2, 2020
@adamziel adamziel changed the title Do not invalidate the record during the optimistic update Do not invalidate the entity record during optimistic update Nov 2, 2020
@adamziel adamziel changed the title Do not invalidate the entity record during optimistic update Do not invalidate the entity record during optimistic update in saveEntityRecord Nov 2, 2020
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Nov 2, 2020

Size Change: +2 B (0%)

Total Size: 1.21 MB

Filename Size Change
build/core-data/index.js 12.3 kB +2 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.78 kB 0 B
build/api-fetch/index.js 3.45 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 8.72 kB 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/index.js 130 kB 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/editor-rtl.css 8.97 kB 0 B
build/block-library/editor.css 8.97 kB 0 B
build/block-library/index.js 146 kB 0 B
build/block-library/style-rtl.css 7.86 kB 0 B
build/block-library/style.css 7.86 kB 0 B
build/block-library/theme-rtl.css 837 B 0 B
build/block-library/theme.css 838 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 172 kB 0 B
build/components/style-rtl.css 15.2 kB 0 B
build/components/style.css 15.2 kB 0 B
build/compose/index.js 9.81 kB 0 B
build/data-controls/index.js 772 B 0 B
build/data/index.js 8.77 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 768 B 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.46 kB 0 B
build/edit-navigation/index.js 11.2 kB 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/edit-post/index.js 306 kB 0 B
build/edit-post/style-rtl.css 6.41 kB 0 B
build/edit-post/style.css 6.39 kB 0 B
build/edit-site/index.js 22.1 kB 0 B
build/edit-site/style-rtl.css 3.88 kB 0 B
build/edit-site/style.css 3.88 kB 0 B
build/edit-widgets/index.js 26.4 kB 0 B
build/edit-widgets/style-rtl.css 3.13 kB 0 B
build/edit-widgets/style.css 3.13 kB 0 B
build/editor/editor-styles-rtl.css 480 B 0 B
build/editor/editor-styles.css 482 B 0 B
build/editor/index.js 43.1 kB 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.85 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 7.7 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 712 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.11 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.34 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/reusable-blocks/index.js 3.06 kB 0 B
build/rich-text/index.js 13.2 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@adamziel
Copy link
Copy Markdown
Contributor Author

adamziel commented Nov 2, 2020

The only failure is an unrelated ["Failed to inject axe-core into frame (about:blank)"],["Failed to inject axe-core into frame (about:blank)"] (#26527).

@adamziel
Copy link
Copy Markdown
Contributor Author

adamziel commented Nov 2, 2020

This one is ready for review cc @youknowriad

@youknowriad
Copy link
Copy Markdown
Contributor

this fixes #22127 right? I wonder if we can make an e2e test out of that. Might not be that easy.

@adamziel
Copy link
Copy Markdown
Contributor Author

adamziel commented Nov 3, 2020

@youknowriad I think it improves the situation, not necessarily fixes it. I'll comment on that issue after testing this one together with #26575 and #26387

As for tests - it seems like e2e test could be done via await page.setRequestInterception(true); as seen in this StackOverflow answer. Intuitively it would be a pain to debug if it breaks though. For starters I'll follow up with a jest integration test like the one seen here: https://github.com/WordPress/gutenberg/pull/26575/files#diff-12591da18c6e86be9fae5d8ea461708ad2d2e511cda93ab853a9a066047006f1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] Core data /packages/core-data

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants