Skip to content

feat(journaling): support named storage providers - #11275

Merged
ReubenBond merged 2 commits into
dotnet:mainfrom
ReubenBond:rb-feat-named-journal-providers
Sep 16, 2026
Merged

ReubenBond merged 2 commits into
dotnet:mainfrom
ReubenBond:rb-feat-named-journal-providers

Conversation

@ReubenBond

@ReubenBond ReubenBond commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

Problem

Journal storage registration currently configures a single default provider. Consumers which need independent journal namespaces need a consistent way to select storage, catalogs, and state-manager factories while preserving default grain journaling.

Solution

Add named registrations for Azure Blob Storage, Azure Table Storage, Redis, Amazon S3, and volatile storage. A shared generic registration binds each provider's storage, optional catalog, state-manager factory, and lifecycle participation to the same singleton. Configuration-based builders honor provider names independently of client service keys.

The Default binding continues to use the unnamed backend-options pipeline, including configuration delegates registered before or after the storage helper and each ConfigureAll delegate applied once. Other bindings use their exact named options and leave default services stable. Existing unkeyed consumers retain their default-provider behavior.

Include focused registration regression coverage, generated API surfaces, and named-provider documentation. This standalone PR is the Journaling foundation for #11277, which contains Durable Jobs provider selection and migration. Generic Journaling participant/observer contracts being extracted from #10693 are complementary work.

Microsoft Reviewers: Open in CodeFlow

Copilot AI lite review requested due to automatic review settings September 16, 2026 19:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Unresolved provider-resolution inconsistency and source-compatibility overload conflicts must be addressed before approval.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity · 4 Medium severity

Open (5)
What changed in this PR

Adds named journal storage providers for Azure, Redis, S3, and volatile storage while preserving default journaling behavior.

Changes:

  • Adds keyed provider, catalog, factory, and lifecycle registrations.
  • Updates provider builders and validation for named options.
  • Adds regression tests, generated APIs, and documentation.
File Summary
test/​Orleans.Journaling.Tests/​KeyedJournalingRegistrationTests.cs Keyed registration regression coverage.
test/​Orleans.Journaling.Tests/​AzureTableStorageHostingExtensionsTests.cs Azure Table registration tests.
test/​Orleans.Journaling.Tests/​AzureTableStorageGrainJournalingProviderBuilderTests.cs Azure Table builder tests.
test/​Extensions/​Orleans.Redis.Tests/​Journaling/​RedisGrainJournalingProviderBuilderTests.cs Redis builder tests.
src/​Redis/​Orleans.Journaling.Redis/​RedisJournalStorageOptionsValidator.cs Named Redis options validation.
src/​Redis/​Orleans.Journaling.Redis/​RedisJournalStorageHostingExtensions.cs Named Redis registration.
src/​Redis/​Orleans.Journaling.Redis/​RedisGrainJournalingProviderBuilder.cs Named Redis configuration support.
src/​Orleans.Journaling/​HostingExtensions.cs Shared journaling registration infrastructure.
src/​Azure/​Orleans.Journaling.AzureStorage/​AzureTableStorageHostingExtensions.cs Named Azure Table registration.
src/​Azure/​Orleans.Journaling.AzureStorage/​AzureTableStorageGrainJournalingProviderBuilder.cs Named Azure Table configuration support.
src/​Azure/​Orleans.Journaling.AzureStorage/​AzureBlobStorageHostingExtensions.cs Named Azure Blob registration.
src/​Azure/​Orleans.Journaling.AzureStorage/​AzureBlobStorageGrainJournalingProviderBuilder.cs Named Azure Blob configuration support.
src/​AWS/​Orleans.Journaling.S3/​S3JournalStorageHostingExtensions.cs Named S3 registration.
src/​api/​Redis/​Orleans.Journaling.Redis/​Orleans.Journaling.Redis.cs Generated Redis API surface.
src/​api/​Orleans.Journaling/​Orleans.Journaling.cs Generated core API surface.
src/​api/​Azure/​Orleans.Journaling.AzureStorage/​Orleans.Journaling.AzureStorage.cs Generated Azure API surface.
src/​api/​AWS/​Orleans.Journaling.S3/​Orleans.Journaling.S3.cs Generated S3 API surface.
docs/​site/​src/​content/​docs/​grains/​journaling/​redis-journal-storage.md Redis named-provider documentation.
docs/​site/​src/​content/​docs/​grains/​journaling/​configuration.md Journaling configuration documentation.
docs/​site/​src/​content/​docs/​grains/​journaling/​azure-storage.md Azure named-provider documentation.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/Orleans.Journaling/HostingExtensions.cs
Comment thread src/AWS/Orleans.Journaling.S3/S3JournalStorageHostingExtensions.cs Outdated
Comment thread src/Azure/Orleans.Journaling.AzureStorage/AzureBlobStorageHostingExtensions.cs Outdated
Comment thread src/Azure/Orleans.Journaling.AzureStorage/AzureTableStorageHostingExtensions.cs Outdated
Comment thread src/Redis/Orleans.Journaling.Redis/RedisJournalStorageHostingExtensions.cs Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

No unresolved blocking issues were identified, and the supplied assessments confirm approval readiness.

Review effort: Lite
Findings: None

Resolved since last review (5)

@ReubenBond
ReubenBond merged commit 3e9433e into dotnet:main Sep 16, 2026
67 checks passed
@ReubenBond
ReubenBond deleted the rb-feat-named-journal-providers branch September 16, 2026 20:34
@github-actions

Copy link
Copy Markdown
Contributor

Code coverage

Metric Pull request
Lines 82.04% (112,024 / 136,545)
Branches 71.21% (32,199 / 45,220)

Report-only conclusion: current-main baseline stale.

The newest successful coverage run tested 7193f06, not current main 1133353.

Coverage combines every CI test matrix job, including providers, CodeGen, .NET 8/10, Linux, Windows, and macOS, using canonical physical source and branch identities.

The comparison remains report-only while normal line and branch variance is calibrated.

Coverage details

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