Skip to content

fix(datastore): include late-bound DDSes in attach messages - #28213

Draft
shlevari wants to merge 1 commit into
microsoft:mainfrom
shlevari:wi76716-channel-context
Draft

fix(datastore): include late-bound DDSes in attach messages#28213
shlevari wants to merge 1 commit into
microsoft:mainfrom
shlevari:wi76716-channel-context

Conversation

@shlevari

@shlevari shlevari commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Description

Data store attach messages previously captured the channel summary and GC data in separate passes. If a DDS synchronously created and bound another DDS while either pass ran, the new DDS could become globally visible and submit ops without being included in the attach snapshot. Remote clients would then close with 0xa6b (Channel context not found) when processing those ops.

This change captures attach summaries and GC data together until both cover the same complete set of bound DDSes. It also replaces the unknown-channel assert with a diagnostic DataProcessingError and corrects the equivalent fixed-point traversal for nested data stores.

Regression coverage includes a local-server test that creates a DDS during attach GC generation, submits an op through it, reloads the document in another container, and verifies the DDS and its data round-trip successfully.

AB#76716

Reviewer Guidance

The review process is outlined in the pull request guidelines.

The main review focus is the bounded combined-capture loop in FluidDataStoreRuntime and the optional internal cross-layer fallback for older or custom data store channel implementations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added area: tools area: runtime Runtime related issues area: repo Repo related work area: website area: tests Tests to add, test infrastructure improvements, etc changeset-present base: main PRs targeted against main branch labels Sep 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hi! Thank you for opening this PR. Want me to review it?

Based on the diff (1507 lines, 12 files), I've queued these reviewers:

  • Correctness — logic errors, race conditions, lifecycle issues
  • Security — vulnerabilities, secret exposure, injection
  • API Compatibility — breaking changes, release tags, type design
  • Performance — algorithmic regressions, memory leaks
  • Testing — coverage gaps, hollow tests

How this works

  • Adjust the reviewer set by ticking/unticking boxes above. Reviewer toggles alone don't trigger anything.

  • Tick Start review below to dispatch the review fleet.

  • After review finishes, tick Start review again to request another run — it auto-resets after each dispatch.

  • This comment updates as new commits land; your reviewer selections are preserved.

  • Start review

@github-actions

Copy link
Copy Markdown
Contributor

Bundle size comparison

Base commit: 054eee0ed8cb111e74c0c3310ea44e183978d754
Head commit: 52e8252a77b40503ad9df022bf11832cf1d46249

Notable changes

  • 🔴 fluidFrameworkAllAlpha.js: parsed 805357 → 806495 (+1138), gzip 221154 → 221505 (+351)
  • 🔴 azureClient.js: parsed 634204 → 636406 (+2202), gzip 169924 → 170562 (+638)
  • 🔴 odspClient.js: parsed 606468 → 608786 (+2318), gzip 162990 → 163644 (+654)
  • 🔴 aqueduct.js: parsed 538081 → 540295 (+2214), gzip 144406 → 144979 (+573)
  • 🔴 containerRuntime.js: parsed 314896 → 315961 (+1065), gzip 86384 → 86634 (+250)
Per-bundle deltas

@fluid-example/bundle-size-tests

  • 🔴 fluidFrameworkAllAlpha.js: parsed 805357 → 806495 (+1138), gzip 221154 → 221505 (+351)
  • 🔴 azureClient.js: parsed 634204 → 636406 (+2202), gzip 169924 → 170562 (+638)
  • 🔴 odspClient.js: parsed 606468 → 608786 (+2318), gzip 162990 → 163644 (+654)
  • 🔴 aqueduct.js: parsed 538081 → 540295 (+2214), gzip 144406 → 144979 (+573)
  • fluidFramework.js: parsed 414671 → 414704 (+33), gzip 117583 → 117620 (+37)
  • sharedTree.js: parsed 404050 → 404076 (+26), gzip 115038 → 115055 (+17)
  • 🔴 containerRuntime.js: parsed 314896 → 315961 (+1065), gzip 86384 → 86634 (+250)
  • sharedString.js: parsed 175191 → 175198 (+7), gzip 49636 → 49644 (+8)
  • experimentalSharedTree.js: parsed 161846 → 161846 (0), gzip 46722 → 46722 (0)
  • matrix.js: parsed 153720 → 153727 (+7), gzip 44381 → 44388 (+7)
  • loader.js: parsed 147327 → 147343 (+16), gzip 40038 → 40048 (+10)
  • odspDriver.js: parsed 106694 → 106752 (+58), gzip 33224 → 33293 (+69)
  • directory.js: parsed 65669 → 65676 (+7), gzip 18493 → 18501 (+8)
  • 578.js: parsed 58686 → 58686 (0), gzip 17657 → 17657 (0)
  • odspPrefetchSnapshot.js: parsed 46463 → 46444 (-19), gzip 15511 → 15522 (+11)
  • map.js: parsed 45820 → 45827 (+7), gzip 14119 → 14126 (+7)
  • 252.js: parsed 44384 → 44384 (0), gzip 13741 → 13741 (0)
  • summarizerDelayLoadedModule.js: parsed 31287 → 31287 (0), gzip 7929 → 7929 (0)
  • socketModule.js: parsed 27108 → 27078 (-30), gzip 8067 → 8103 (+36)
  • createNewModule.js: parsed 12464 → 12464 (0), gzip 4792 → 4805 (+13)
  • summaryModule.js: parsed 3888 → 3888 (0), gzip 1874 → 1874 (0)
  • connectionState.js: parsed 909 → 909 (0), gzip 500 → 500 (0)
  • sharedTreeAttributes.js: parsed 845 → 852 (+7), gzip 496 → 505 (+9)
  • debugAssert.js: parsed 429 → 429 (0), gzip 299 → 299 (0)
  • FluidFramework-HashFallback.js: parsed 419 → 419 (0), gzip 313 → 313 (0)

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

Labels

area: repo Repo related work area: runtime Runtime related issues area: tests Tests to add, test infrastructure improvements, etc area: tools area: website base: main PRs targeted against main branch changeset-present

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant