feat(journaling): support named storage providers - #11275
Conversation
There was a problem hiding this comment.
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
Open (5)
Keep the unkeyed factory aligned with the unkeyed provider · New Named overload makes null configuration calls ambiguous · New Named overload makes null configuration calls ambiguous · New Named overload makes null configuration calls ambiguous · New Named overload makes null configuration calls ambiguous · New
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.
Code coverage
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 |


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
Defaultbinding continues to use the unnamed backend-options pipeline, including configuration delegates registered before or after the storage helper and eachConfigureAlldelegate 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