| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-10-02 | 47.2 kB | |
| v10.4.0 source code.tar.gz | 2026-10-02 | 17.0 MB | |
| v10.4.0 source code.zip | 2026-10-02 | 20.3 MB | |
| Totals: 3 Items | 37.4 MB | 0 | |
This release strengthens cluster membership consistency, extends cooperative cancellation across framework APIs, and gives streaming applications more control over subscription start positions and dequeue sizes. This release also fixes SQLite persistence under contention, modernizes request-latency metrics, improves serialization and source-generation efficiency, and expands the preview journaling and Durable Jobs capabilities.
Compatibility and upgrade notes
[!IMPORTANT] Review the SQLite query updates and metric schema changes when upgrading.
- Refresh existing SQLite persistence queries (#11354). SQLite writes now use a single implicit transaction, preserving atomicity and durable clears when pooled connections encounter writer contention. Reapply the 10.4.0 SQLite main script and SQLite persistence script to existing databases to install the corrected queries. Both scripts are idempotent and preserve grain state.
- Update request-latency dashboards and exporter configuration (#11251). Application request latency is now a standard
Histogram<double>namedorleans-app-requests-latency, measured in fractional milliseconds. It replaces the separateorleans-app-requests-latency-bucket,-count, and-suminstruments and theirdurationattribute. Configure histogram boundaries through an OpenTelemetry View and update dashboards, alerts, and recording rules for the exporter representation. Use matching boundaries across instances whose distributions are aggregated. - Use canonical grain-type metric dimensions (#11253).
orleans-grainsnow usesgrain_type, containing the canonicalGrainId.Typeidentity, in place oftype, which contained the CLR implementation name. Activation lifecycle metrics also gain this dimension. Update queries and label filters accordingly. - Review explicitly numbered RPC parameters (#11179). RPC parameter
[Id]attributes now control serialized argument IDs, and automatic IDs count serialized parameters. PlaceCancellationTokenlast. Existing contracts with parameter[Id]attributes or non-last cancellation tokens can change argument wire IDs relative to 10.3.1; coordinate their client/silo contract upgrade or introduce versioned contracts. Method-level[Id]attributes and ordinary unannotated, token-last contracts retain their existing identities and argument numbering. - Review preview journaling API changes (#11211, #11276, #11319). Journaling and Durable Jobs packages continue as
10.4.0-alpha.1. Custom integrations should adopt the updated durable-state/state-machine contracts and streamed catalog enumeration APIs. Named-provider migration is an opt-in capability for moving Durable Jobs between storage backends; existing default-provider convenience registrations remain available.
Highlights
Runtime, clustering, and reminders
- Consistent membership across providers. Core membership and the Azure Storage, Cosmos DB, DynamoDB, Consul, Redis, Cassandra, Firestore, ADO.NET, and ZooKeeper implementations strengthen atomic updates, canonical snapshots, and heartbeat handling. ZooKeeper preserves consistent snapshot reads under contention, and Firestore preserves atomic membership reads (#11307, #11309, #11317, #11342, #11387).
- Cancellation-aware framework contracts. Trailing cancellation tokens flow through runtime, reminder, streaming, transaction, management, and other framework operations. Legacy overloads and stable wire aliases preserve existing implementations and established framework call identities (#10937).
- More efficient manifest retrieval. Content-addressed retrieval is enabled by default, allowing silos to reuse immutable manifests by canonical SHA-256 hash and repair missing metadata from peers.
ClusterManifestOptions.EnableContentAddressedRetrievalselects the retrieval mode (#11239). - Stronger lifecycle handling. Shutdown drains admitted connection-establishment and client-observer work; reminder startup and topology reconciliation are better ordered; directory recovery deactivates duplicate activations; and idle migrated activations are collected (#11263, #11264, #11118, #11030, #11365).
Streaming
- Choose where subscriptions begin.
StreamSubscriptionStartPosition.LatestandEarliestAvailableprovide per-subscription control, with a provider default throughStreamPullingAgentOptions.InitialSubscriptionStartPosition.EarliestAvailablestarts at the oldest retained message for the stream in the local queue cache. An explicit sequence token takes precedence, andLatestremains the default. Enable the new controls after pulling-agent silos have been upgraded (#10936). - Better recovery and handoffs. Typed cache-cursor results, provider-encoded offsets, and a reusable checkpoint state machine improve provider recovery. SQS and Azure Queue handoffs release messages, recovery preserves prefetched batches and pooled-buffer ownership, and pulling agents drain detached work during shutdown (#9714, #11153, #11154, #11062, #11144, #11268).
- Tune memory-stream dequeue sizes. Per-provider
MemoryStreamCacheOptions.MaxAddCountcontrols the maximum number of queue records requested per dequeue, allowing applications to balance response size and queue-call overhead. The default remains 100 (#11238).
Persistence and transactions
- SQLite persistence returns scalar versions and recovers cleanly from writer contention. Relational providers also receive normalized integer reads, corrected PostgreSQL persistence scripts, and Oracle defunct-silo cleanup support (#11322, #11354, #11283, #11247, #11246).
- Transaction participant locks honor transaction timeouts, aborted queued lock operations are removed, and recovery cleanup tasks are awaited (#10457, #10455, #11188).
- DynamoDB providers honor configured endpoint credentials, bind token and profile options, and redact tokens in logs. Provider configuration validation and invariant text handling are strengthened across storage and clustering integrations (#11292, #11290, #11288).
Preview journaling and Durable Jobs
- S3 Express One Zone journal storage.
Microsoft.Orleans.Journaling.S3adds append-based write-ahead logs, conditional metadata/checkpoint publication, catalog discovery, and provider metrics. A conditional-rewrite mode supports S3-compatible development environments (#10161). - Composable, named journal providers. Grains can compose durable state through the updated APIs, while named providers bind storage, catalogs, and state-manager factories together. Catalog enumeration streams results, and recovery serializes retries while preserving persistence failures (#11279, #11275, #11211, #11326).
- Controlled Durable Jobs provider migration. Select an active provider for new shards and draining providers for existing jobs, inspect storage before retirement, and retain saved job handles across the cutover. Shard discovery uses start-time ordering, and shutdown drains scheduling and releases running shards. Queue wake-ups and flush signals are coalesced (#11277, #11258, #11301, #11103, #11206).
Serialization, code generation, and deployment
- Improved NativeAOT building blocks. Generated C# codecs and copiers use ref-returning
UnsafeAccessormethods for private, readonly, and backing fields on supported targets. Grain activation constructors are preserved, non-generic grain references gain native construction, and serialization constructors can initialize existing objects under NativeAOT. Default serializer activation uses a shared construction path with consistent exception propagation (#11372, #11383, #11371, #11373, #11390). - Opt-in serializer Hot Reload. Set
<OrleansHotReload>true</OrleansHotReload>to generate stable member/dependency identities and lazily initialize dependencies added to existing serializers and copiers. Supported updates add strongly typed serialized members to classes and records; restart to refresh manifests when adding new polymorphic or collection-element types (#10932). - Correct compound-aliased array resolution. Polymorphic arrays and arrays nested in closed generic types deserialize correctly, with the existing writer bytes preserved (#11392).
- Less repeated work and copying. The generator caches library types per compilation, serialization-attribute analysis skips generated code, contiguous JSON payloads are read directly, and buffered tail reads avoid repeated page traversal. Metadata discovery also supports single-file deployment (#11363, #11384, #11270, #11209, #11054).
Observability and developer tooling
- Request latency uses native histogram aggregation, while canonical, cached grain-type dimensions make activation populations and lifecycle events easier to correlate (#11251, #11253).
- Dashboard state inspection reuses JSON options, and its statistics timer follows the grain-service lifecycle. Orleans templates now include Copilot instructions (#11190, #11359, #11006).
Microsoft.Orleans.Clustering.TestKitprovides framework-neutral membership-provider conformance scenarios and generated operation histories for validating custom providers (#11308).
What's Changed
- fix(reminders): observe completed retries before timeout by @ReubenBond in https://github.com/dotnet/orleans/pull/10916
- fix(transactions): honor transaction timeout for participant locks by @ReubenBond in https://github.com/dotnet/orleans/pull/10457
- fix(runtime): quiesce client route publication before shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/10917
- test(placement): stabilize activation rebalancing startup by @ReubenBond in https://github.com/dotnet/orleans/pull/10930
- fix(analyzers): create missing Orleans contract manifests by @ReubenBond in https://github.com/dotnet/orleans/pull/10915
- fix(testing): synchronize in-process cluster logging by @ReubenBond in https://github.com/dotnet/orleans/pull/10929
- fix(testing): scope diagnostic observers to test clusters by @ReubenBond in https://github.com/dotnet/orleans/pull/10945
- feat(codegen): support stable field naming and hot reload by @koenbeuk in https://github.com/dotnet/orleans/pull/10932
- test(serialization): cover segmented buffer traversal by @ReubenBond in https://github.com/dotnet/orleans/pull/10964
- test(runtime): cover expired directory lease cleanup by @ReubenBond in https://github.com/dotnet/orleans/pull/10960
- test(aws): cover DynamoDB configuration by @ReubenBond in https://github.com/dotnet/orleans/pull/10952
- test(analyzers): cover contract code fix edge cases by @ReubenBond in https://github.com/dotnet/orleans/pull/10956
- test(streaming): cover subscription lifecycle by @ReubenBond in https://github.com/dotnet/orleans/pull/10957
- test(journaling): cover legacy recovery contracts by @ReubenBond in https://github.com/dotnet/orleans/pull/10959
- refactor(diagnostics): remove unreachable messaging events by @ReubenBond in https://github.com/dotnet/orleans/pull/10951
- test(testing): cover TestingHost lifecycle branches by @ReubenBond in https://github.com/dotnet/orleans/pull/10958
- perf(runtime): optimize version selector cache under cluster churn by @ReubenBond in https://github.com/dotnet/orleans/pull/10946
- fix(testing): stabilize reminder topology boundaries by @ReubenBond in https://github.com/dotnet/orleans/pull/10933
- fix(runtime): synchronize stateless worker status by @ReubenBond in https://github.com/dotnet/orleans/pull/10968
- fix(serialization): allow well-known generic arguments by @ReubenBond in https://github.com/dotnet/orleans/pull/10970
- fix(testing): preserve deterministic reminder cleanup by @ReubenBond in https://github.com/dotnet/orleans/pull/10974
- test(security): cover TLS hosting and duplex pipes by @ReubenBond in https://github.com/dotnet/orleans/pull/10963
- perf(serialization): avoid delimiter array allocations by @ReubenBond in https://github.com/dotnet/orleans/pull/10966
- ci: compare coverage with current main by @ReubenBond in https://github.com/dotnet/orleans/pull/10948
- chore(deps-dev): bump browserslist from 4.28.4 to 4.28.8 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in https://github.com/dotnet/orleans/pull/10977
- test(redis): cover journaling provider builder by @ReubenBond in https://github.com/dotnet/orleans/pull/10975
- test(serialization): cover mutable tuple copying by @ReubenBond in https://github.com/dotnet/orleans/pull/10987
- chore: use CFS package proxies by @ReubenBond in https://github.com/dotnet/orleans/pull/10981
- perf: enforce CA1849 async diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11002
- test: centralize NSubstitute analyzers by @ReubenBond in https://github.com/dotnet/orleans/pull/10993
- ci: add analyzer audit lanes by @ReubenBond in https://github.com/dotnet/orleans/pull/10988
- ci: expand scheduled CodeQL analysis by @ReubenBond in https://github.com/dotnet/orleans/pull/10984
- build: modernize Roslyn analyzers by @ReubenBond in https://github.com/dotnet/orleans/pull/10991
- feat(streaming): add subscription start position by @ReubenBond in https://github.com/dotnet/orleans/pull/10936
- chore: enforce analyzer baseline by @ReubenBond in https://github.com/dotnet/orleans/pull/10996
- perf: enforce CA1848 logging diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11000
- perf: enforce CA1873 logging guards by @ReubenBond in https://github.com/dotnet/orleans/pull/10999
- feat: add cancellation-aware RPC contracts by @ReubenBond in https://github.com/dotnet/orleans/pull/10937
- test(streaming): cover stream identity JSON contracts by @ReubenBond in https://github.com/dotnet/orleans/pull/11007
- test(event-sourcing): cover synchronization and recovery by @ReubenBond in https://github.com/dotnet/orleans/pull/11009
- test(analyzers): cover ConfigureAwait analyzer branches by @ReubenBond in https://github.com/dotnet/orleans/pull/11008
- test(testing): cover grain directory convergence observer by @ReubenBond in https://github.com/dotnet/orleans/pull/11010
- test(runtime): cover grain directory registration handoff by @ReubenBond in https://github.com/dotnet/orleans/pull/11014
- perf: enforce CA2002 lock diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11001
- test(aws): cover DynamoDB storage mutations by @ReubenBond in https://github.com/dotnet/orleans/pull/11011
- fix(test): skip unconfigured ADO.NET fixtures by @ReubenBond in https://github.com/dotnet/orleans/pull/11015
- fix(testing): separate reminder refresh barriers by @ReubenBond in https://github.com/dotnet/orleans/pull/11021
- test(journaling): synchronize legacy recovery repair by @ReubenBond in https://github.com/dotnet/orleans/pull/11019
- feat(templates): add Orleans Copilot instructions by @ReubenBond in https://github.com/dotnet/orleans/pull/11006
- fix(testing): isolate reminder topology timeout by @ReubenBond in https://github.com/dotnet/orleans/pull/11017
- fix(test): pass cancellation tokens in handoff tests by @ReubenBond in https://github.com/dotnet/orleans/pull/11040
- build: add banned API policy by @ReubenBond in https://github.com/dotnet/orleans/pull/10995
- test: make message TTL serialization deterministic by @ReubenBond in https://github.com/dotnet/orleans/pull/11018
- test: stabilize Cosmos reminder manifest convergence by @ReubenBond in https://github.com/dotnet/orleans/pull/11029
- perf: enforce CA2000 ownership diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11003
- docs: enforce public API documentation by @ReubenBond in https://github.com/dotnet/orleans/pull/10992
- fix(directory): deactivate recovery duplicates by @ReubenBond in https://github.com/dotnet/orleans/pull/11030
- ci: enforce whitespace formatting by @ReubenBond in https://github.com/dotnet/orleans/pull/10986
- fix(cosmos): retry transient reminder reads by @ReubenBond in https://github.com/dotnet/orleans/pull/11031
- docs(streaming): document subscription start positions by @ReubenBond in https://github.com/dotnet/orleans/pull/11025
- build: broaden banned API policy by @ReubenBond in https://github.com/dotnet/orleans/pull/11046
- fix(runtime): harden lifecycle lock identity by @ReubenBond in https://github.com/dotnet/orleans/pull/11050
- fix(aws): use invariant DynamoDB clustering text by @ReubenBond in https://github.com/dotnet/orleans/pull/11051
- fix: support single-file metadata discovery by @ReubenBond in https://github.com/dotnet/orleans/pull/11054
- fix(core): enforce disposable ownership by @ReubenBond in https://github.com/dotnet/orleans/pull/11052
- fix(docs): forward async stream cancellation token by @ReubenBond in https://github.com/dotnet/orleans/pull/11072
- fix(core): make interface mapping trim-safe by @ReubenBond in https://github.com/dotnet/orleans/pull/11055
- fix(testing): support single-file standalone silos by @ReubenBond in https://github.com/dotnet/orleans/pull/11068
- fix(aws): use invariant DynamoDB state serialization by @ReubenBond in https://github.com/dotnet/orleans/pull/11056
- test(reminders): stabilize singleton startup topology by @ReubenBond in https://github.com/dotnet/orleans/pull/11067
- ci: fix invalid cfs-npm Dependabot registry configuration by @ReubenBond in https://github.com/dotnet/orleans/pull/11079
- test(analyzers): stabilize temporary directory cleanup by @ReubenBond in https://github.com/dotnet/orleans/pull/11069
- fix(build): resolve analyzer enforcement blockers by @ReubenBond in https://github.com/dotnet/orleans/pull/11080
- test(streaming): await failure detection before lease recovery by @ReubenBond in https://github.com/dotnet/orleans/pull/11081
- test: synchronize async enumerable deactivation by @ReubenBond in https://github.com/dotnet/orleans/pull/11084
- test(durable-jobs): stabilize shard start timing assertion by @ReubenBond in https://github.com/dotnet/orleans/pull/11065
- fix(test): synchronize receiver stream delivery by @ReubenBond in https://github.com/dotnet/orleans/pull/11061
- test(reminders): stabilize TestKit topology startup by @ReubenBond in https://github.com/dotnet/orleans/pull/11064
- fix(ci): avoid provider apt refreshes by @ReubenBond in https://github.com/dotnet/orleans/pull/11085
- test: allow expected client directory error during rolling restart by @ReubenBond in https://github.com/dotnet/orleans/pull/11078
- ci: diagnose Dashboard npm terminations by @ReubenBond in https://github.com/dotnet/orleans/pull/11066
- fix(reminders): enforce lifecycle provider consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/10908
- chore(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in https://github.com/dotnet/orleans/pull/10976
- chore(deps-dev): bump fast-uri from 3.1.5 to 3.1.6 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/10978
- ci: centralize Dashboard asset builds in tests by @ReubenBond in https://github.com/dotnet/orleans/pull/11070
- test(reminders): stabilize legacy topology convergence by @ReubenBond in https://github.com/dotnet/orleans/pull/11082
- fix(ci): preserve artifact upload failures by @ReubenBond in https://github.com/dotnet/orleans/pull/11086
- fix(transactions): remove aborted queued lock operations by @ReubenBond in https://github.com/dotnet/orleans/pull/10455
- fix(testing): await reminder startup topology by @ReubenBond in https://github.com/dotnet/orleans/pull/11063
- ci: validate package compatibility by @ReubenBond in https://github.com/dotnet/orleans/pull/10994
- fix(ci): pin SQL Server test image by @ReubenBond in https://github.com/dotnet/orleans/pull/11090
- fix(benchmarks): register adaptive ping grain types by @ReubenBond in https://github.com/dotnet/orleans/pull/11092
- fix(docs): stabilize validation timeouts by @ReubenBond in https://github.com/dotnet/orleans/pull/11091
- fix(durable-jobs): prevent duplicate queue entries by @ReubenBond in https://github.com/dotnet/orleans/pull/11097
- fix(streaming): recover cache misses from oldest data by @BMagerMT in https://github.com/dotnet/orleans/pull/9711
- ci: capture Linux net8 test coordinator crashes by @ReubenBond in https://github.com/dotnet/orleans/pull/11096
- test(reminders): isolate exact-due recovery setup by @ReubenBond in https://github.com/dotnet/orleans/pull/11105
- test(analyzers): stabilize repository target contract by @ReubenBond in https://github.com/dotnet/orleans/pull/11104
- fix(azure): validate reminder options by @ReubenBond in https://github.com/dotnet/orleans/pull/11101
- fix(azure): use invariant clustering text by @ReubenBond in https://github.com/dotnet/orleans/pull/11107
- ci: retain failed test diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11102
- fix(test): update MTP to 2.4.0 by @ReubenBond in https://github.com/dotnet/orleans/pull/11110
- ci: run macOS tests daily by @ReubenBond in https://github.com/dotnet/orleans/pull/11112
- fix(dashboard): use deterministic text handling by @ReubenBond in https://github.com/dotnet/orleans/pull/11100
- test(runtime): stabilize manual activation collection by @ReubenBond in https://github.com/dotnet/orleans/pull/11117
- fix(testing): avoid redundant reminder topology refresh by @ReubenBond in https://github.com/dotnet/orleans/pull/11116
- test(placement): synchronize static rebalancing observations by @ReubenBond in https://github.com/dotnet/orleans/pull/11113
- test(placement): fix state preservation flake by @ReubenBond in https://github.com/dotnet/orleans/pull/11114
- fix(serialization): make reflection trim-safe by @ReubenBond in https://github.com/dotnet/orleans/pull/11115
- fix(cosmos): validate reminder options by @ReubenBond in https://github.com/dotnet/orleans/pull/11099
- fix(redis): validate clustering options by @ReubenBond in https://github.com/dotnet/orleans/pull/11098
- fix(streaming): release SQS messages during handoff by @ReubenBond in https://github.com/dotnet/orleans/pull/11062
- fix(ci): collect coverage on Linux .NET 10 by @ReubenBond in https://github.com/dotnet/orleans/pull/11087
- test(reminders): isolate local owner update path by @ReubenBond in https://github.com/dotnet/orleans/pull/11109
- fix(docs): allowlist SQS permissions reference by @ReubenBond in https://github.com/dotnet/orleans/pull/11129
- fix(runtime): retain observer cancellation until dispatch by @ReubenBond in https://github.com/dotnet/orleans/pull/11111
- fix(reminders): order topology reconciliation admission by @ReubenBond in https://github.com/dotnet/orleans/pull/11118
- fix(ci): preserve retry policy across nested test actions by @ReubenBond in https://github.com/dotnet/orleans/pull/11131
- fix(redis): validate grain directory inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11127
- fix(reminders): await queued startup range changes by @ReubenBond in https://github.com/dotnet/orleans/pull/11132
- ci: disable macOS builds by @ReubenBond in https://github.com/dotnet/orleans/pull/11134
- fix(azure): validate transaction storage inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11125
- fix(storage): validate memory storage inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11124
- fix(azure): validate grain directory inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11126
- fix(firestore): validate grain directory inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11121
- test(runtime): synchronize forwarded cancellation by @ReubenBond in https://github.com/dotnet/orleans/pull/11143
- fix(azure): validate grain storage inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11139
- fix(serialization): validate test kit inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11140
- fix(zookeeper): validate clustering inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11138
- test(reminders): isolate exact-due delivery refresh by @ReubenBond in https://github.com/dotnet/orleans/pull/11145
- test(runtime): make one-way deactivation setup deterministic by @ReubenBond in https://github.com/dotnet/orleans/pull/11147
- fix(streaming): preserve prefetched recovery batches by @ReubenBond in https://github.com/dotnet/orleans/pull/11149
- refactor(runtime): encapsulate ActivationData synchronization by @ReubenBond in https://github.com/dotnet/orleans/pull/10068
- fix(reminders): validate test kit inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11137
- fix(cosmos): validate clustering setup by @ReubenBond in https://github.com/dotnet/orleans/pull/11122
- feat(journaling): add S3 Express storage provider by @ReubenBond in https://github.com/dotnet/orleans/pull/10161
- perf(durable-jobs): reduce queue wake-ups by @ReubenBond in https://github.com/dotnet/orleans/pull/11103
- test(runtime): keep grain call filter observers alive by @ReubenBond in https://github.com/dotnet/orleans/pull/11142
- fix(streaming): release Azure Queue messages during handoff by @ReubenBond in https://github.com/dotnet/orleans/pull/11144
- fix(analyzers): enforce ordinal string comparisons by @ReubenBond in https://github.com/dotnet/orleans/pull/11150
- fix(analyzers): expand CA1062 provider coverage by @ReubenBond in https://github.com/dotnet/orleans/pull/11157
- refactor(streaming): add typed cache cursor results by @BMagerMT in https://github.com/dotnet/orleans/pull/9714
- fix(analyzers): expand CA1062 library coverage by @ReubenBond in https://github.com/dotnet/orleans/pull/11160
- fix(analyzers): validate transaction test kit inputs by @ReubenBond in https://github.com/dotnet/orleans/pull/11161
- test(runtime): remove stateless worker directory race by @ReubenBond in https://github.com/dotnet/orleans/pull/11163
- test(reminders): isolate range-read gate ownership by @ReubenBond in https://github.com/dotnet/orleans/pull/11148
- fix: define CA1815 value semantics by @ReubenBond in https://github.com/dotnet/orleans/pull/11166
- fix(analyzers): enforce disposable field ownership by @ReubenBond in https://github.com/dotnet/orleans/pull/11167
- fix(core): preserve DI constructors when trimming by @ReubenBond in https://github.com/dotnet/orleans/pull/11170
- fix(serialization): validate codec arguments by @ReubenBond in https://github.com/dotnet/orleans/pull/11168
- fix(analyzers): enforce CA1062 for Cosmos and S3 by @ReubenBond in https://github.com/dotnet/orleans/pull/11171
- fix(streaming): validate boundary arguments by @ReubenBond in https://github.com/dotnet/orleans/pull/11172
- fix(serialization): validate support contracts by @ReubenBond in https://github.com/dotnet/orleans/pull/11174
- fix(journaling): validate JSON codec contracts by @ReubenBond in https://github.com/dotnet/orleans/pull/11176
- fix(core): validate boundary arguments by @ReubenBond in https://github.com/dotnet/orleans/pull/11178
- fix(journaling): use ordinal identifier comparisons by @ReubenBond in https://github.com/dotnet/orleans/pull/11177
- fix(runtime): order ring range notifications by @ReubenBond in https://github.com/dotnet/orleans/pull/11182
- test(runtime): derive one-way topology from directory owner by @ReubenBond in https://github.com/dotnet/orleans/pull/11181
- fix(codegen): honor RPC parameter field IDs by @ReubenBond in https://github.com/dotnet/orleans/pull/11179
- fix(reminders): preserve cleanup failures by @ReubenBond in https://github.com/dotnet/orleans/pull/11195
- fix(runtime): specify continuation schedulers by @ReubenBond in https://github.com/dotnet/orleans/pull/11194
- perf(dashboard): cache grain state JSON options by @ReubenBond in https://github.com/dotnet/orleans/pull/11190
- test(analyzers): isolate nested restore from feeds by @ReubenBond in https://github.com/dotnet/orleans/pull/11199
- test(runtime): allocate heterogeneous silo ports at startup by @ReubenBond in https://github.com/dotnet/orleans/pull/11201
- fix(test): retry SQL Server setup ownership race by @ReubenBond in https://github.com/dotnet/orleans/pull/11202
- fix(test): skip unavailable providers by @ReubenBond in https://github.com/dotnet/orleans/pull/11200
- fix(transactions): await recovery cleanup tasks by @ReubenBond in https://github.com/dotnet/orleans/pull/11188
- test(reminders): stabilize range-change barrier by @ReubenBond in https://github.com/dotnet/orleans/pull/11197
- docs: document formatting verification by @ReubenBond in https://github.com/dotnet/orleans/pull/11198
- fix(runtime): use messaging clock for callback expiry by @ReubenBond in https://github.com/dotnet/orleans/pull/11180
- perf(durable-jobs): coalesce flush signals by @ReubenBond in https://github.com/dotnet/orleans/pull/11206
- perf(serialization): optimize buffered tail reads by @ReubenBond in https://github.com/dotnet/orleans/pull/11209
- fix: avoid virtual calls during construction by @ReubenBond in https://github.com/dotnet/orleans/pull/11196
- fix(ci): update SourceLink packages flagged by NU1902 by @ReubenBond in https://github.com/dotnet/orleans/pull/11216
- feat(journaling)!: stream catalog enumeration by @ReubenBond in https://github.com/dotnet/orleans/pull/11211
- fix: report exact ring cardinality and cover range boundaries by @ReubenBond in https://github.com/dotnet/orleans/pull/11221
- fix(streaming): preserve pooled cache buffer ownership by @ReubenBond in https://github.com/dotnet/orleans/pull/11152
- feat(streaming): support provider-encoded cache offsets by @ReubenBond in https://github.com/dotnet/orleans/pull/11153
- feat(streaming): add reusable checkpoint state machine by @ReubenBond in https://github.com/dotnet/orleans/pull/11154
- fix(streaming): satisfy checkpoint state analyzer by @ReubenBond in https://github.com/dotnet/orleans/pull/11227
- fix(streaming): migrate encoded-offset cache tests to result APIs by @ReubenBond in https://github.com/dotnet/orleans/pull/11230
- chore(deps): bump svgo from 4.0.2 to 4.1.0 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11214
- chore(deps): bump astro from 7.1.3 to 7.2.10 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11224
- chore(deps): bump @vitest/mocker and vitest in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11228
- chore(deps): bump sharp from 0.35.3 to 0.35.4 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11232
- chore(deps): bump smol-toml from 1.7.0 to 1.8.0 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11234
- fix(docs): tolerate transient GitHub link throttling by @ReubenBond in https://github.com/dotnet/orleans/pull/11229
- fix(ci): retry stalled coverage uploads by @ReubenBond in https://github.com/dotnet/orleans/pull/11215
- fix(streaming): recover legacy sequence tokens by @ReubenBond in https://github.com/dotnet/orleans/pull/11155
- ci: retry transient NuGet metadata restore failures by @ReubenBond in https://github.com/dotnet/orleans/pull/11218
- ci: retry S3 test image pulls by @ReubenBond in https://github.com/dotnet/orleans/pull/11231
- feat(streaming): configure memory stream dequeue limits by @ReubenBond in https://github.com/dotnet/orleans/pull/11238
- docs: remove unrelated POCO grains section from migration guide by @ReubenBond in https://github.com/dotnet/orleans/pull/11240
- fix(runtime): honor membership and load cancellation lifetimes by @ReubenBond in https://github.com/dotnet/orleans/pull/11237
- test(s3): use SeaweedFS by @ReubenBond in https://github.com/dotnet/orleans/pull/11252
- fix(test): retain SQL setup ownership across batches by @ReubenBond in https://github.com/dotnet/orleans/pull/11245
- chore(deps): bump js-yaml from 4.3.1 to 4.3.2 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11233
- fix(ci): retry transient test coordinator failures by @ReubenBond in https://github.com/dotnet/orleans/pull/11244
- chore: add safe PR rebase and readiness reporting script by @ReubenBond in https://github.com/dotnet/orleans/pull/11236
- feat(manifest): enable content-addressed retrieval by default by @ReubenBond in https://github.com/dotnet/orleans/pull/11239
- fix(streaming): await dropped client cleanup by @ReubenBond in https://github.com/dotnet/orleans/pull/11260
- feat(metrics): add canonical cached grain-type dimensions by @ReubenBond in https://github.com/dotnet/orleans/pull/11253
- feat(metrics): use native request latency histogram by @ReubenBond in https://github.com/dotnet/orleans/pull/11251
- fix(durable-jobs): drain scheduling and activation on shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/11256
- fix(adonet): align PostgreSQL persistence script with its migration by @ranma42 in https://github.com/dotnet/orleans/pull/11247
- fix(adonet): add missing CleanupDefunctSiloEntriesKey to Oracle clustering by @ranma42 in https://github.com/dotnet/orleans/pull/11246
- perf: streamline request context import by @ReubenBond in https://github.com/dotnet/orleans/pull/11212
- fix: drain connection establishment during shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/11263
- feat(durable-jobs): discover shards by start time by @ReubenBond in https://github.com/dotnet/orleans/pull/11258
- refactor(reminders): gate reminder delivery admission by @ReubenBond in https://github.com/dotnet/orleans/pull/11262
- fix(streaming): advance checkpoints past drained subscriptions by @fickleEfrit in https://github.com/dotnet/orleans/pull/11249
- fix(journaling): bound Azure Table catalog key literals by @ReubenBond in https://github.com/dotnet/orleans/pull/11257
- fix: drain admitted client observer invocations during shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/11264
- refactor: gate client route publication quiescence by @ReubenBond in https://github.com/dotnet/orleans/pull/11266
- refactor: gate ADO.NET receiver work by @ReubenBond in https://github.com/dotnet/orleans/pull/11265
- fix(streaming): remove defunct stream publishers by @ReubenBond in https://github.com/dotnet/orleans/pull/10532
- refactor: simplify transaction storage draining by @ReubenBond in https://github.com/dotnet/orleans/pull/11267
- fix(streaming): drain detached pulling-agent work by @ReubenBond in https://github.com/dotnet/orleans/pull/11268
- feat(journaling): measure catalog traversal and provider retries by @ReubenBond in https://github.com/dotnet/orleans/pull/11259
- fix(test): avoid SQL Server single-user setup by @ReubenBond in https://github.com/dotnet/orleans/pull/11271
- perf(serialization): read contiguous JSON payloads directly by @ReubenBond in https://github.com/dotnet/orleans/pull/11270
- perf(journaling): benchmark Azure storage providers by @ReubenBond in https://github.com/dotnet/orleans/pull/11261
- feat(journaling): support named storage providers by @ReubenBond in https://github.com/dotnet/orleans/pull/11275
- build: upgrade xUnit to 4.0.0 by @ReubenBond in https://github.com/dotnet/orleans/pull/11274
- fix(journaling)!: recover failed operations in new activations by @ReubenBond in https://github.com/dotnet/orleans/pull/11276
- fix(adonet): normalize integer reads by @ReubenBond in https://github.com/dotnet/orleans/pull/11283
- chore(deps): bump dotnet-sdk from 10.0.400 to 10.0.401 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11281
- feat(durable-jobs): support journal provider migration by @ReubenBond in https://github.com/dotnet/orleans/pull/11277
- fix(test): update MTP to 2.4.1 by @ReubenBond in https://github.com/dotnet/orleans/pull/11299
- fix(test): bind scheduler stress grains to their activation context by @ReubenBond in https://github.com/dotnet/orleans/pull/11302
- fix(durable-jobs): unregister running shards during shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/11301
- fix(samples): isolate Razor compilation in CI by @ReubenBond in https://github.com/dotnet/orleans/pull/11298
- test: capture Windows net10 host diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11300
- test(adonet): drain reconnect workers during setup teardown by @ReubenBond in https://github.com/dotnet/orleans/pull/11297
- fix(streaming): validate NATS stream dimensions by @ReubenBond in https://github.com/dotnet/orleans/pull/11293
- fix(aws): redact DynamoDB tokens by @ReubenBond in https://github.com/dotnet/orleans/pull/11288
- fix(streaming): redact NATS endpoint credentials in logs by @ReubenBond in https://github.com/dotnet/orleans/pull/11291
- fix(streaming): bound NATS producer selection by @ReubenBond in https://github.com/dotnet/orleans/pull/11287
- fix(aws): bind DynamoDB token and profile options by @ReubenBond in https://github.com/dotnet/orleans/pull/11290
- fix(aws): honor DynamoDB endpoint credentials by @ReubenBond in https://github.com/dotnet/orleans/pull/11292
- fix(testing): cancel draining after fatal silo errors by @ReubenBond in https://github.com/dotnet/orleans/pull/11294
- fix(journaling): activate configured journal providers by @ReubenBond in https://github.com/dotnet/orleans/pull/11289
- feat(runtime): add shared grain activation setup by @ReubenBond in https://github.com/dotnet/orleans/pull/11305
- fix(membership): preserve canonical membership views by @ReubenBond in https://github.com/dotnet/orleans/pull/11296
- feat(journaling): support composition on plain grains by @ReubenBond in https://github.com/dotnet/orleans/pull/11279
- fix(ci): update coverage collector to 18.11.2 by @ReubenBond in https://github.com/dotnet/orleans/pull/11321
- chore(deps): bump devalue from 5.8.2 to 5.9.2 in /docs/site by @dependabot[bot] in https://github.com/dotnet/orleans/pull/11320
- fix(adonet): return scalar SQLite persistence versions by @ReubenBond in https://github.com/dotnet/orleans/pull/11322
- fix(consul): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11314
- fix(redis): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11313
- fix(aws): preserve DynamoDB membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11310
- fix(zookeeper): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11316
- fix(cassandra): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11315
- fix(membership): preserve core membership invariants by @ReubenBond in https://github.com/dotnet/orleans/pull/11307
- feat(testing): add membership provider conformance kit by @ReubenBond in https://github.com/dotnet/orleans/pull/11308
- fix(ci): select latest test-result artifacts by creation time by @ReubenBond in https://github.com/dotnet/orleans/pull/11329
- fix(azure): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11309
- fix(firestore): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11311
- fix(cosmos): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11312
- fix(adonet): preserve membership consistency by @ReubenBond in https://github.com/dotnet/orleans/pull/11317
- revert(streaming): revert drained-subscription checkpoint advancement by @ReubenBond in https://github.com/dotnet/orleans/pull/11330
- refactor(journaling): separate durable state and journal APIs by @ReubenBond in https://github.com/dotnet/orleans/pull/11319
- fix(clustering): synchronize torn point-read fault injection by @ReubenBond in https://github.com/dotnet/orleans/pull/11334
- fix(testing): handle narrow reminder owner ranges by @ReubenBond in https://github.com/dotnet/orleans/pull/11336
- refactor(testing): guarantee reminder owner placement by @ReubenBond in https://github.com/dotnet/orleans/pull/11337
- fix(testing): tolerate cancellation during client kill by @ReubenBond in https://github.com/dotnet/orleans/pull/11339
- fix(zookeeper): make membership reads sequential and resilient by @ReubenBond in https://github.com/dotnet/orleans/pull/11338
- test(membership): wire provider conformance suites by @ReubenBond in https://github.com/dotnet/orleans/pull/11332
- ci: suppress dotnet coverage logo by @ReubenBond in https://github.com/dotnet/orleans/pull/11340
- ci: remove ZooKeeper failure diagnostics by @ReubenBond in https://github.com/dotnet/orleans/pull/11341
- test(streaming): stabilize publisher restart endpoint by @ReubenBond in https://github.com/dotnet/orleans/pull/11343
- fix(journaling): serialize recovery retries and preserve persistence failures by @ReubenBond in https://github.com/dotnet/orleans/pull/11326
- fix(firestore): preserve atomic membership reads by @ReubenBond in https://github.com/dotnet/orleans/pull/11342
- test(zookeeper): make close ordering assertion deterministic by @ReubenBond in https://github.com/dotnet/orleans/pull/11347
- fix(codegen): escape reserved C# keywords in generated metadata namespace by @akashchamp in https://github.com/dotnet/orleans/pull/11349
- fix(testing): avoid dynamic client port allocation by @ReubenBond in https://github.com/dotnet/orleans/pull/11348
- fix(docs): serialize Windows Astro output by @ReubenBond in https://github.com/dotnet/orleans/pull/11357
- perf(codegen): cache LibraryTypes per compilation by @koenbeuk in https://github.com/dotnet/orleans/pull/11363
- ci: pin Consul GCR mirror with Docker Hub fallback by @ReubenBond in https://github.com/dotnet/orleans/pull/11366
- fix: collect idle migrated grain activations by @ReubenBond in https://github.com/dotnet/orleans/pull/11365
- ci(aot): centralize NativeAOT smoke coverage by @ReubenBond in https://github.com/dotnet/orleans/pull/11367
- fix(dashboard): stop statistics timer with grain service by @KSemenenko in https://github.com/dotnet/orleans/pull/11359
- fix(aot): preserve grain activation constructors by @ReubenBond in https://github.com/dotnet/orleans/pull/11383
- perf(analyzers): skip generated code in GenerateSerializationAttributesAnalyzer by @koenbeuk in https://github.com/dotnet/orleans/pull/11384
- feat(codegen): generate AOT-safe C# private field accessors by @ReubenBond in https://github.com/dotnet/orleans/pull/11372
- fix(serialization): support NativeAOT default activation by @ReubenBond in https://github.com/dotnet/orleans/pull/11369
- fix(serialization): initialize serialization constructors under NativeAOT by @ReubenBond in https://github.com/dotnet/orleans/pull/11373
- fix(core): construct grain references without dynamic code by @ReubenBond in https://github.com/dotnet/orleans/pull/11371
- fix(zookeeper): preserve snapshot reads under contention by @ReubenBond in https://github.com/dotnet/orleans/pull/11387
- fix(serialization): resolve compound-aliased array type names by @ReubenBond in https://github.com/dotnet/orleans/pull/11392
- refactor(serialization): unify default object activation by @ReubenBond in https://github.com/dotnet/orleans/pull/11390
- fix(adonet): prevent SQLite transaction leaks by @ReubenBond in https://github.com/dotnet/orleans/pull/11354
- test(codegen): cover readonly record struct init setters by @ReubenBond in https://github.com/dotnet/orleans/pull/11393
New Contributors
- @ranma42 made their first contribution in https://github.com/dotnet/orleans/pull/11247
- @akashchamp made their first contribution in https://github.com/dotnet/orleans/pull/11349
- @KSemenenko made their first contribution in https://github.com/dotnet/orleans/pull/11359
Full Changelog: https://github.com/dotnet/orleans/compare/v10.3.1...v10.4.0