Orleans v10.2.0 focuses on runtime reliability, grain directory correctness, observability, Durable Jobs and journaling improvements, provider fixes, and a broad test/CI stabilization push.
Highlights
- Runtime and grain directory reliability: fixes for activation/deactivation races (#10016, #10046), shutdown cleanup (#10206), membership reconciliation (#10086), directory transfer batching (#10047, #10053), stale cache invalidation (#10078, #10105), and rolling-upgrade compatibility (#10050).
- Journaling and Durable Jobs: JSON Lines is now the default Orleans.Journaling format (#9973), Durable Jobs use the journaling catalog (#10148), and new tracing/metrics make job scheduling and execution observable (#10151).
- Observability: expanded activation and grain directory metrics (#10124, #10125, #10147),
grain_typetags on request timeout/cancel counters (#10178), a Dashboard lifecycle dependency graph (#10145), and migration of Orleans metrics toIMeterFactory(#10201). - Provider stability: reminder delivery and shutdown behavior were hardened (#10154, #10155), Cosmos fixes landed for reminder deletes, ETags, and indexing (#10037, #10041, #10084), Redis reminder serialization and multiplexer ownership were fixed (#10099, #10146, #10182), NATS storage configuration was added (#10028, #10176), Azure retry behavior improved (#10192), and streaming checkpoint persistence was fixed (#10096).
- Serialization: added
ArcBuffersupport (#10066), built-in codecs for collection interface types (#10104, #10106), serializer conformance baselines (#10034), and safer request-context deserialization (#10017). - Testing and CI: many flaky tests were made deterministic (#10101, #10186, #10216), provider Docker pulls became retryable (#10190, #10191, #10198), artifact uploads are non-blocking (#10158), workflows are more secure (#10027, #10102), and SDK/frontend dependencies were updated (#10205, #9998).
Breaking changes and notable behavior changes
- Redis multiplexer ownership: Redis providers using a DI-provided
IConnectionMultiplexerviaServiceKeyno longer dispose that shared multiplexer on shutdown. Providers which create their own multiplexer still own and dispose it. (#10146, #10182) - Metrics meter access: the static Orleans meter was removed. Code which referenced
Orleans.Runtime.Instruments.Metershould resolveOrleansInstrumentsfrom DI and use itsMeterinstead. (#10201) - Journaling default format: JSON Lines is now the default Orleans.Journaling storage format. Existing journals with stored format metadata continue to be read correctly; legacy entries without metadata are treated as OrleansBinary and migrate on snapshot write. Set
JournaledStateManagerOptions.JournalFormatKey = "orleans-binary"to retain the old format for new writes. (#9973) - Silo startup lifecycle: a new
ValidateInitialConnectivitystage runs beforeBecomeActive, keeping silos inJoininguntil initial peer connectivity is validated. (#10153) - Reminder lifecycle: reminder delivery is gated on the silo becoming active, while reminder register/update/unregister operations remain available later into shutdown. (#10154, #10155)
- Client connection retries: the default client retry filter now retries additional transient gateway/startup failures, including
OrleansMessageRejectionExceptionandConnectionFailedException, with a longer default retry window. (#10140) - Directory activation-failure retries: retry loops after directory activation failures are now bounded by the normal message forward-count budget. (#10094)
- Diagnostics listener name:
GrainLifecycleEvents.ListenerNameis now correctly"Orleans.GrainLifecycle"; code subscribing by the previous string literal should update. (#10121) - Durable Jobs storage providers: custom Durable Jobs journaling providers need catalog support via
IJournalStorageCatalog. (#10112, #10148) - NATS options validation: invalid
StorageTypeenum values are rejected at startup. (#10176)
Runtime, activation, placement, and lifecycle
- Fixed a stateless-worker reactivation race and a crash when cancelling indefinite keep-alive tickets. (#10016, #10014)
- Fixed stuck deactivation recovery by removing stranded activations from the catalog, unregistering directory entries, and avoiding stale forwarding loops. (#10046)
- Fixed shutdown activations leaving stale grain directory entries. (#10206)
- Made the activation collector safer under memory pressure and when there are no valid candidates. (#10113)
- Stopped and awaited
PlacementServiceworkers during silo shutdown. (#9993) - Prevented persistent stream pulling agents from accepting work or processing queue reads after shutdown starts. (#10036)
- Stabilized late lifecycle registration scheduling to avoid lock/scheduler races. (#10135)
- Added explicit initial connectivity validation before a silo becomes active. (#10153)
- Avoided tracking deactivated grains in activation repartitioner state and fixed repartitioning waits for inactive migrations. (#10061, #10130)
- Reduced runtime hot-path overhead by avoiding per-activation scheduler logger fields, reducing request monitoring memory use, avoiding context capture in outgoing calls, optimizing response completion sources, simplifying
InsideRuntimeClientresponse handling, and removing locks from activation response processing. (#10118, #10119, #10129, #10127, #10128, #10139, #10141) - Broadened the default client connection retry filter to cover more transient startup and gateway failures. (#10140)
Grain directory, routing, and cache correctness
- Added TTL cleanup to the grain directory cache and diagnostic hooks for cache state changes. (#10055)
- Added a fast-path message destination cache for grain calls, with invalidation on activation, connection, gateway, and client state changes. (#10064)
- Capped cache invalidation header growth during message send and deserialization. (#10078, #10105)
- Set target silo metadata correctly on cached silo connections. (#10080)
- Capped distributed directory ownership transfer batch sizes and split large transfer payloads into multiple messages. (#10047, #10053)
- Fixed distributed directory recovery handoff for grains activating during ownership transfer. (#10082)
- Added distributed remote grain directory compatibility for rolling upgrades and a regression test for directory migration joins. (#10050, #10049)
- Fixed LocalGrainDirectory membership reconciliation using snapshot-based processing, membership-version-aware stale cleanup, and membership refresh before directory RPC routing. (#10086, #10087, #10088)
- Simplified LocalGrainDirectory membership processing after the reconciliation changes. (#10089)
- Refined directory forwarding retry checks, removed a problematic directory failure forwarding optimization, and bounded retries after directory activation failures. (#10092, #10095, #10094)
- Restored the local grain directory lookup fast path for locally-owned partitions. (#10126)
Reminders, timers, providers, storage, and streaming
Reminders and timers
- Added reminder lifecycle diagnostics and deterministic reminder testing infrastructure. (#10033)
- Fixed immediate local reminder scheduling when the first tick is already due. (#10040)
- Gated reminder tick delivery on active silos and allowed reminder updates during shutdown cleanup. (#10154, #10155)
- Auto-registered
ITimerRegistryonSystemTargetinstances, enabling grain services/system targets to use features such as async enumerable cleanup timers without manual registration. (#10038)
Cosmos DB
- Treated missing Cosmos reminder deletes as successful idempotent unregisters. (#10037)
- Preserved Cosmos reminder ETags so stale conditional deletes can be detected correctly. (#10041)
- Stabilized Cosmos reminder/container startup behavior and removed Cosmos DB CI exclusions. (#10059, #10042)
- Fixed Cosmos indexing paths for newer emulator/service versions. (#10084)
Redis
- Isolated Redis reminder serialization from application-level
JsonConvert.DefaultSettingsby moving reminder row serialization toSystem.Text.Json. (#10099) - Fixed Redis multiplexer ownership so shared DI-provided multiplexers are not disposed by Orleans providers, and added disposal/ownership tests for the Redis grain directory. (#10146, #10182)
NATS, SQS, memory storage, Azure Storage, transactions, and streaming
- Added configurable NATS JetStream storage type (
FileorMemory) and validation for invalid storage-type values. (#10028, #10176) - Added ElasticMQ-backed SQS provider coverage in CI. (#10003)
- Enabled nullable annotations in memory storage provider builder extensions. (#10110)
- Fixed an Azure Table transaction atomicity issue during
Confirmwhen storage failures occur, and improved classification of conflict/precondition responses. (#10123) - Reduced Azure Table retry pressure with bounded jittered backoff and less duplicate retrying under storage outages. (#10192)
- Fixed streaming checkpoint gaps which could cause replay after restart. (#10096)
- Fixed
TransactionResponsediagnostic formatting. (#10083)
Serialization, analyzers, journaling, and Durable Jobs
Serialization and analyzers
- Capped request-context dictionary preallocation during message deserialization to protect against oversized encoded counts. (#10017)
- Fixed
TypeConverter.ParseInternalalias resolution, enabled nullable annotations, and added support for JSON framework types in type conversion. (#10032) - Added serializer conformance tests and baselines for codec authors and regression detection. (#10034)
- Added
ArcBuffersupport across serialization reader/writer/deserializer paths for lower-copy high-throughput scenarios. (#10066) - Added built-in codecs and snapshots for BCL collection interface types, including
IEnumerable<T>,IReadOnlyList<T>,ISet<T>, and dictionary interfaces. (#10104, #10106) - Fixed Orleans analyzers to match framework types by fully-qualified metadata name instead of short name, avoiding false positives/negatives when user code has similarly named types. (#10107)
Orleans.Journaling
- Added the JSON Lines journal format and made it the default for new journal writes, with opt-in APIs for configuring
System.Text.Jsonsource-generated metadata. (#9973) - Added
IJournalStorageCatalogand optional journal metadata operations to support storage discovery and metadata updates. (#10112) - Made Azure Blob journal compaction checkpoint publication safer using immutable generation-scoped checkpoints. (#10103)
- Added Azure Blob journal storage metrics and retry tuning for metadata-only ETag conflicts. (#10149)
Durable Jobs
- Ported Durable Jobs to the journaled storage catalog, so shard discovery is backed by Orleans.Journaling. (#10148)
- Improved journaled shard throughput by batching writes with a configurable linger delay. (#10150)
- Added Durable Jobs tracing, trace propagation fields on
DurableJob, and metrics for scheduling, dispatch lag, attempts, handler execution, shard processing, storage batches, and ownership checks. (#10151) - Added a Durable Jobs journaling playground sample. (#10152)
API surface and diagnostics
- Updated generated public API surface baselines. (#9986, #10171, #10204)
- Fixed the API-diff validation action to avoid disallowed operations. (#10120)
- Fixed the grain lifecycle diagnostic listener name. (#10121)
Observability, metrics, logging, and Dashboard
- Migrated logging in transactions test kit, testing host, event sourcing, reminders, runtime, Dashboard, Durable Jobs, TLS middleware, and async enumerable streaming to source-generated
[LoggerMessage]methods, reducing disabled-log overhead and allocations. (#10018, #10019, #10020, #10021, #10022, #10023, #10024, #10025, #10026) - Changed runtime memory metrics to
ObservableGauge, matching point-in-time memory semantics for exporters such as Prometheus. (#10029) - Implemented remaining grain directory metrics for snapshot transfers, range recovery, range-lock hold time, and registrations. (#10124)
- Added activation lifecycle latency histograms and activation population/lifecycle counters. (#10125, #10147)
- Added
grain_typetags to application request timeout and cancellation counters. (#10178) - Added a Dashboard silo lifecycle dependency graph view for inspecting startup/shutdown stage ordering and registered lifecycle observers. (#10145)
- Migrated Orleans metrics to
IMeterFactoryfor correct DI scoping, listener registration, test isolation, and multi-host scenarios. This covered networking, watchdog, gateway, scheduler, consistent ring, storage, catalog, client, reminder, directory, grain, stream, messaging, messaging processing, Durable Jobs, Azure Blob journal storage, journaling, environment statistics, stream cache, Event Hubs receiver/cache, and stream receiver metrics. (#10137, #10138, #10142, #10143, #10144, #10162, #10168, #10169, #10172, #10173, #10175, #10177, #10179, #10180, #10181, #10183, #10184, #10193, #10194, #10195, #10199, #10200) - Removed the static Orleans meter after the
IMeterFactorymigration. (#10201)
Testing, benchmarks, CI, docs, and dependencies
Test reliability and speed
- Replaced timing-sensitive waits with deterministic synchronization for stateless-worker late delivery, async enumerable slow-consumer tests, activation rebalancing, deactivation placement, broadcast channels, idle/deactivate-on-idle behavior, reminder scheduling, activation collection, placement migration, journaling recovery retry, transaction fault injection, stream generator reset, rolling-upgrade directory behavior, streaming client drops, runtime timers, membership health monitoring, queue balancer changes, liveness stabilization, upgrade readiness, timer callbacks, and consistent ring provider tests. (#10077, #10101, #10131, #10132, #10134, #10156, #10157, #10159, #10163, #10166, #10170, #10185, #10186, #10187, #10188, #10189, #10207, #10208, #10209, #10212, #10213, #10215, #10216, #10220)
- Removed slow or redundant sleeps in ring cleanup and sped up membership health monitor, runtime timer, and collector tests. (#10210, #10207, #10209)
Benchmarks
- Added an
AdaptivePingbenchmark with hill-climbing concurrency tuning and improved convergence rules for more reproducible throughput measurements. (#10069, #10076)
CI and workflow reliability
- Added explicit least-privilege GitHub Actions permissions and restricted maintenance workflows to the upstream repository. (#10027, #10102)
- Made artifact uploads non-blocking so upload failures do not fail otherwise successful jobs. (#10158)
- Made MariaDB, Azure emulator, and provider Docker pulls more resilient to registry/network timeouts. (#10190, #10191, #10198)
- Skipped external Dashboard asset builds in provider test jobs to reduce unrelated npm/network failures. (#10196)
- Repaired the API diff workflow. (#10164)
- Updated GitHub Actions to Node.js 24. (#10203)
Documentation and contributor workflow
- Documented the upstream PR workflow and required Conventional Commits for future contribution history. (#10056, #10133)
- Corrected cluster membership heartbeat/defaults documentation. (#10197)
SDK and dependency updates
- Updated the pinned .NET SDK from 10.0.201 to 10.0.203, then 10.0.300, then 10.0.301. (#10015, #10097, #10205)
- Updated Dashboard frontend dependencies:
minimatch,picomatch,flatted,postcss,rollup, andvite. (#9956, #9974, #9967, #10043, #9957, #9998)
What's Changed
- Fix reactivation race in
StatelessWorkerGrainContextby @ReubenBond in #10016 - chore(loggermessage): migrate reminder logging by @ReubenBond in #10021
- chore(loggermessage): migrate runtime logging by @ReubenBond in #10022
- chore(loggermessage): migrate async enumerable logging by @ReubenBond in #10026
- chore(loggermessage): migrate transactions test kit logging by @ReubenBond in #10018
- Add ElasticMQ SQS CI coverage by @ReubenBond in #10003
- chore(loggermessage): migrate dashboard logging by @ReubenBond in #10023
- chore(loggermessage): migrate durable jobs logging by @ReubenBond in #10024
- chore(loggermessage): migrate TLS middleware logging by @ReubenBond in #10025
- GitHub Actions: add explicit permissions to workflows by @ReubenBond in #10027
- fix(message-serializer): cap request context initial capacity by @ReubenBond in #10017
- chore(loggermessage): migrate testing host logging by @ReubenBond in #10019
- chore(loggermessage): migrate event sourcing logging by @ReubenBond in #10020
- chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9956
- Add configurable storage type to NATS streaming provider by @Cluster7ck in #10028
- Add aliases in TypeConverter.ParseInternal, implement nullability, add JSON types by @ReubenBond in #10032
- Add serializer conformance tests and baselines by @ReubenBond in #10034
- Use ObservableGauge for runtime memory metrics in EnvironmentStatisticsProvider by @Copilot in #10029
- ActivationCollector: Fix ArgumentException when cancelling indefinite keep-alive by @tomachristian in #10014
- chore(deps): bump dotnet-sdk from 10.0.201 to 10.0.203 by @dependabot[bot] in #10015
- Reminders: add lifecycle diagnostics and testing infrastructure by @ReubenBond in #10033
- Handle missing Cosmos reminder deletes by @ReubenBond in #10037
- Fix immediate local reminder scheduling by @ReubenBond in #10040
- Preserve Cosmos reminder ETags for stale delete checks by @ReubenBond in #10041
- Stop PlacementService workers during shutdown by @ReubenBond in #9993
- Prevent post-shutdown stream agent calls by @ReubenBond in #10036
- Remove CosmosDB CI test exclusions by @ReubenBond in #10042
- Fix stuck deactivation recovery by @ReubenBond in #10046
- Document upstream PR workflow by @ReubenBond in #10056
- Add TTL cleanup to grain directory cache by @ReubenBond in #10055
- Add AdaptivePing benchmark with hill-climbing concurrency tuning by @ReubenBond in #10069
- Add ArcBuffer support to Orleans serialization by @ReubenBond in #10066
- Add fast-path message destination cache by @ReubenBond in #10064
- Cap distributed directory ownership transfer batch size by @ReubenBond in #10047
- Limit cache invalidation header growth by @ReubenBond in #10078
- Set target silo for cached silo connections by @ReubenBond in #10080
- Fix DistributedGrainDirectory recovery handoff for activating grains by @ReubenBond in #10082
- Fix TransactionResponse diagnostic formatting by @ReubenBond in #10083
- Fix Cosmos reminder flake by @ReubenBond in #10059
- Improve AdaptivePing convergence by @ReubenBond in #10076
- Fix stateless worker late-delivery race test flake by @ReubenBond in #10077
- Add distributed remote grain directory compatibility by @ReubenBond in #10050
- Batch large directory transfer payloads by @ReubenBond in #10053
- Add directory migration join regression by @ReubenBond in #10049
- chore(deps): bump picomatch in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9974
- chore(deps-dev): bump flatted from 3.3.3 to 3.4.2 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9967
- chore(deps): bump postcss from 8.5.6 to 8.5.12 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #10043
- chore(deps): bump rollup from 4.52.5 to 4.60.3 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9957
- Fix LocalGrainDirectory membership reconciliation by @ReubenBond in #10086
- Use membership versions for stale directory cleanup by @ReubenBond in #10087
- Refresh membership before directory RPC routing by @ReubenBond in #10088
- Simplify LocalGrainDirectory membership processing by @ReubenBond in #10089
- Remove directory failure forwarding optimization by @ReubenBond in #10095
- Refine directory forwarding retry checks by @ReubenBond in #10092
- Bound retries after directory activation failures by @ReubenBond in #10094
- Fix Cosmos indexing paths for latest emulator by @ReubenBond in #10084
- Avoid tracking deactivated grains in repartitioner state by @ReubenBond in #10061
- chore(deps): bump dotnet-sdk from 10.0.203 to 10.0.300 by @dependabot[bot] in #10097
- chore(deps-dev): bump vite from 5.4.21 to 8.0.11 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9998
- Restrict maintenance workflows to upstream repo by @ReubenBond in #10102
- Stabilize async enumerable slow consumer tests by @ReubenBond in #10101
- Fix Redis reminders affected by JsonConvert defaults by @ReubenBond in #10099
- Add JSONL format for Orleans.Journaling by @ReubenBond in #9973
- Limit deserialized cache invalidation headers by @ReubenBond in #10105
- Add interface collection codecs by @ReubenBond in #10104
- Use immutable checkpoints for Azure journal compaction by @ReubenBond in #10103
- Enable nullable in memory storage provider builder by @rkargMsft in #10110
- fix(analyzers): match by fully qualified name by @sehra in #10107
- Add concrete interface collection codec snapshots by @ReubenBond in #10106
- Clean up journaling storage provider APIs by @ReubenBond in #10112
- Avoid disallowed API diff action by @ReubenBond in #10120
- [Automated] Update API Surface Area by @github-actions[bot] in #9986
- Fix grain lifecycle diagnostic listener name by @ReubenBond in #10121
- Avoid per-activation scheduler logger fields by @ReubenBond in #10118
- Implement remaining grain directory metrics by @ReubenBond in #10124
- Add activation lifecycle latency metrics by @ReubenBond in #10125
- Fix activation collector memory pressure safety by @ReubenBond in #10113
- Avoid capturing context in outgoing call invoker by @ReubenBond in #10129
- Optimize response completion source by @ReubenBond in #10127
- [Transactions] Fix atomicity violation in storage failure handler during Confirm by @ReubenBond in #10123
- Refactor InsideRuntimeClient response handling by @ReubenBond in #10128
- Avoid waiting for inactive repartitioning migrations by @ReubenBond in #10130
- Stabilize activation rebalancer control test by @ReubenBond in #10131
- docs: require conventional commits by @ReubenBond in #10133
- Make deactivation placement test deterministic by @ReubenBond in #10132
- Stabilize broadcast channel CI test waits by @ReubenBond in #10134
- Restore local grain directory lookup fast path by @ReubenBond in #10126
- chore: Use IMeterFactory for networking metrics by @Meir017 in #10137
- chore: Use IMeterFactory for watchdog metrics by @Meir017 in #10138
- perf(runtime): receive activation response outside of lock by @ReubenBond in #10139
- feat(client): broaden default client connection retry filter by @ReubenBond in #10140
- perf(runtime): remove activation response state lock by @ReubenBond in #10141
- chore: Use IMeterFactory for gateway metrics by @Meir017 in #10142
- chore: Use IMeterFactory for scheduler metrics by @Meir017 in #10143
- feat(dashboard): add silo lifecycle dependency graph view by @ReubenBond in #10145
- perf(runtime): reduce request monitoring memory footprint by @ReubenBond in #10119
- fix: validate connectivity in explicit ValidateInitialConnectivity stage before BecomeActive by @ReubenBond in #10153
- feat(runtime): add activation metrics by @ReubenBond in #10147
- fix(reminders): gate delivery on active silo by @ReubenBond in #10154
- feat(durablejobs): port to journaled storage catalog by @ReubenBond in #10148
- fix(reminders): allow grains to update reminders during shutdown by @ReubenBond in #10155
- feat(journaling-azure): add instrumentation and retry tuning by @ReubenBond in #10149
- perf(durablejobs): improve journaled shard throughput by @ReubenBond in #10150
- chore: Use IMeterFactory for consistent ring metrics by @Meir017 in #10144
- feat(durablejobs,journaling): add tracing and batching metrics by @ReubenBond in #10151
- Auto-register
ITimerRegistrycomponent onSystemTargetsby @ledjon-behluli in #10038 - test: avoid eager activation in idle test by @ReubenBond in #10156
- fix: make transaction fault test deterministic by @ReubenBond in #10157
- fix(lifecycle): stabilize late registration scheduling by @ReubenBond in #10135
- Fix deterministic reminder scheduling waits by @ReubenBond in #10159
- ci: make artifact uploads non-blocking by @ReubenBond in #10158
- chore(playground): add DurableJobs journaling playground by @ReubenBond in #10152
- test: fix deactivate-on-idle grain selection flake by @ReubenBond in #10163
- chore: use meter factory for storage metrics by @Meir017 in #10162
- test: stabilize prefer-local placement migration test by @ReubenBond in #10166
- fix: repair API diff workflow by @ReubenBond in #10164
- chore: use IMeterFactory for ClientInstruments by @Meir017 in #10169
- chore: use meter factory for catalog metrics by @Meir017 in #10168
- test: make journaling recovery retry tests deterministic by @Meir017 in #10170
- chore: use IMeterFactory for ReminderInstruments by @Meir017 in #10172
- chore: use IMeterFactory for DirectoryInstruments by @Meir017 in #10173
- [Automated] Update API Surface Area by @github-actions[bot] in #10171
- chore: use IMeterFactory for GrainInstruments by @Meir017 in #10175
- feat: Add grain_type tag to app-request timeout/cancel counters by @Cluster7ck in #10178
- chore: use IMeterFactory for StreamInstruments by @Meir017 in #10177
- chore: use IMeterFactory for MessagingInstruments by @Meir017 in #10179
- fix(redis)!: fix multiplexer ownership by @ReubenBond in #10146
- chore: use IMeterFactory for DurableJobsInstruments by @Meir017 in #10181
- fix(nats): Validate StorageType and pin NATS test endpoint (follow-up to #10028) by @Cluster7ck in #10176
- chore: use IMeterFactory for JournalingInstruments by @Meir017 in #10184
- fix(redis): consistent grain directory disposal + multiplexer ownership tests by @ReubenBond in #10182
- chore: use IMeterFactory for AzureBlobJournalStorageInstruments by @Meir017 in #10183
- chore: use IMeterFactory for MessagingProcessingInstruments by @Meir017 in #10180
- fix: make bank transfer fault test deterministic by @ReubenBond in #10185
- test: make stream generator reset deterministic by @ReubenBond in #10188
- chore: use meter factory for environment statistics metrics by @Meir017 in #10193
- chore: use meter factory for stream cache metrics by @Meir017 in #10194
- chore: use meter factory for event hub receiver metrics by @Meir017 in #10195
- ci: make Azure emulator Docker pulls resilient by @ReubenBond in #10191
- fix: stabilize activation rebalancing control test by @ReubenBond in #10189
- ci: skip external asset builds in provider tests by @ReubenBond in #10196
- ci: make provider Docker pulls resilient by @ReubenBond in #10198
- chore: use meter factory for stream receiver metrics by @Meir017 in #10199
- docs: fix cluster membership heartbeat defaults by @ReubenBond in #10197
- ci: update GitHub Actions to Node.js 24 by @Meir017 in #10203
- chore: use meter factory for Event Hubs cache metrics by @Meir017 in #10200
- chore: remove static Orleans meter by @Meir017 in #10201
- test: stabilize reminder and activation collection tests by @ReubenBond in #10186
- fix(storage): reduce Azure table retry pressure by @ReubenBond in #10192
- chore(deps): bump dotnet-sdk from 10.0.300 to 10.0.301 by @dependabot[bot] in #10205
- fix(streaming): prevent checkpoint gaps causing replay by @fickleEfrit in #10096
- ci: make MariaDB CI pulls resilient to timeouts by @ReubenBond in #10190
- test: stabilize grain directory rolling upgrade test by @ReubenBond in #10187
- fix(runtime): unregister shutdown activations from directory by @ReubenBond in #10206
- test: remove slow ring cleanup sleep by @ReubenBond in #10210
- test: speed up runtime timer and collector tests by @ReubenBond in #10209
- test: speed up membership health monitor tests by @ReubenBond in #10207
- test: add event waits for streaming client drops by @ReubenBond in #10208
- test: wait for upgrade cluster readiness by @ReubenBond in #10215
- [Automated] Update API Surface Area by @github-actions[bot] in #10204
- test: stabilize timer tests with FakeTimeProvider by @ReubenBond in #10216
- test: wait for queue balancer changes by @ReubenBond in #10212
- Fix consistent ring provider test flake by @ReubenBond in #10220
- test: wait for liveness stabilization events by @ReubenBond in #10213
New Contributors
- @Cluster7ck made their first contribution in #10028
- @fickleEfrit made their first contribution in #10096
Full Changelog: v10.1.0...v10.2.0