Skip to content

7.0 Branch - RTC Hybrid: Table with awareness in object cache when available#11641

Draft
desrosj wants to merge 12 commits intoWordPress:7.0from
desrosj:collaboration/table-awareness-object-cache
Draft

7.0 Branch - RTC Hybrid: Table with awareness in object cache when available#11641
desrosj wants to merge 12 commits intoWordPress:7.0from
desrosj:collaboration/table-awareness-object-cache

Conversation

@desrosj
Copy link
Copy Markdown
Member

@desrosj desrosj commented Apr 24, 2026

Applies the changes in #11599 to the 7.0 branch to create a patch for the https://github.com/WordPress/distributed-rtc-performance-testing/ repository.

Use of AI Tools

None


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

josephfusco and others added 11 commits April 24, 2026 00:36
Introduces the wp_collaboration table for storing real-time editing
data (document states, awareness info, undo history) and the
WP_Collaboration_Table_Storage class that implements all CRUD
operations against it. Bumps the database schema version to 61840.
Replaces WP_HTTP_Polling_Sync_Server with
WP_HTTP_Polling_Collaboration_Server using the wp-collaboration/v1
REST namespace. Switches to string-based client IDs, fixes the
compaction race condition, adds a backward-compatible wp-sync/v1
route alias, and uses UPDATE-then-INSERT for awareness data.
Deletes WP_Sync_Post_Meta_Storage and WP_Sync_Storage interface,
and removes the wp_sync_storage post type registration from post.php.
These are superseded by the dedicated collaboration table.
Adds wp_is_collaboration_enabled() gate, injects the collaboration
setting into the block editor, registers cron event for cleaning up
stale collaboration data, and updates require/include paths for the
new storage and server classes.
Adds 67 PHPUnit tests for WP_HTTP_Polling_Collaboration_Server covering
document sync, awareness, undo/redo, compaction, permissions, cursor
mechanics, race conditions, cron cleanup, and the backward-compatible
wp-sync/v1 route. Adds E2E tests for 3-user presence, sync, and
undo/redo. Removes the old sync server tests. Updates REST schema
setup and fixtures for the new collaboration endpoints.
Adds a cache-first read path to get_awareness_state() following the
transient pattern: check the persistent object cache, fall back to
the database on miss, and prime the cache with the result.

set_awareness_state() updates the cached entries in-place after the
DB write rather than invalidating, so the cache stays warm for the
next reader in the room. This is application-level deduplication:
the shared collaboration table cannot carry a UNIQUE KEY on
(room, client_id) because sync rows need multiple entries per
room+client pair.

Sites without a persistent cache see no behavior change — the
in-memory WP_Object_Cache provides no cross-request benefit but
keeps the code path identical.
Restore the `wp_client_side_media_processing_enabled` filter and the
`finalize` route that were accidentally removed from the REST schema
test. Add the `collaboration` table to the list of tables expected to
be empty after multisite site creation.
The connectors API key entries in wp-api-generated.js were
incorrectly carried over during the trunk merge. Trunk does not
include them in the generated fixtures since the settings are
dynamically registered and not present in the CI test context.
Rename the `update_value` column to `data` in the collaboration table
storage class and tests, and fix array arrow alignment to satisfy PHPCS.

The shorter name is consistent with WordPress meta tables and avoids
confusion with the `update_value()` method in `WP_REST_Meta_Fields`.
Add a composite index on (type, client_id) to the collaboration table
to speed up awareness upserts, which filter on both columns.

Bump $wp_db_version from 61840 to 61841 so existing installations
pick up the schema change via dbDelta on upgrade.
@desrosj desrosj self-assigned this Apr 24, 2026
@github-actions
Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants