Skip to content

StateMachineManager: start work loop during activation#9725

Merged
ReubenBond merged 3 commits intodotnet:mainfrom
ReubenBond:fix/smm-use-grain-lifecycle
Oct 23, 2025
Merged

StateMachineManager: start work loop during activation#9725
ReubenBond merged 3 commits intodotnet:mainfrom
ReubenBond:fix/smm-use-grain-lifecycle

Conversation

@ReubenBond
Copy link
Member

@ReubenBond ReubenBond commented Oct 22, 2025

In the current implementation, StateMachineManager launches a background task from the grain's constructor, but the constructor is not (currently) scheduled on the activation's task scheduler, so it can run on any other task scheduler (including another activation's task scheduler).

Instead, we should start the work loop from the activation's lifecycle.

Microsoft Reviewers: Open in CodeFlow

@ReubenBond ReubenBond merged commit 69a3d5f into dotnet:main Oct 23, 2025
29 checks passed
@ReubenBond ReubenBond deleted the fix/smm-use-grain-lifecycle branch October 23, 2025 03:06
ledjon-behluli pushed a commit to ledjon-behluli/orleans that referenced this pull request Oct 26, 2025
github-merge-queue bot pushed a commit that referenced this pull request Oct 31, 2025
* retire and purge state machines

* Update src/Orleans.Journaling/StateMachineManager.cs

Co-authored-by: Reuben Bond <203839+ReubenBond@users.noreply.github.com>

* move comments up

* wip

* time-based retirement logic

* last touches

* remove test project

* remove unused usings

* prevent duplicate key error during state machine resurrection

* ensure buffered data is re-applied if machine comes back

* remove hacky assertion in tests

* Update src/Orleans.Journaling/StateMachineManager.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/Orleans.Journaling/StateMachineManager.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/Orleans.Journaling.Tests/StateMachineManagerTests.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/Orleans.Journaling.Tests/StateMachineManagerTests.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/Orleans.Journaling.Tests/StateMachineManagerTests.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix table creation logging to reflect existing tables correctly (#9696)

The `CreateIfNotExistsAsync` method's response will have a 409-statuscode if the table already exists and will always return the `TableItem` if the call is successful.

* Fix ZooKeeper CI tests: correct service name and use official Docker image (#9699)

* Initial plan

* Fix ZooKeeper CI tests: correct service name and use specific image tag

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Use official ZooKeeper Docker image instead of bitnami

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Fix Consul CI tests by using compatible Consul version (#9701)

* Fix Consul key format to comply with allowed characters

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Use custom encoding for Consul keys instead of URL encoding

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Simplify encoding logic to handle both IPv4 and IPv6

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Revert breaking changes and use older Consul version for tests

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* Remove explicit ActivityStatusCode.Ok setting to comply with OpenTelemetry specification (#9703)

* Initial plan

* Remove explicit ActivityStatusCode.Ok per OpenTelemetry spec

Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ReubenBond <203839+ReubenBond@users.noreply.github.com>

* chore(deps): bump dotnet-sdk from 9.0.303 to 9.0.305 (#9677)

Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 9.0.303 to 9.0.305.
- [Release notes](https://github.com/dotnet/sdk/releases)
- [Commits](dotnet/sdk@v9.0.303...v9.0.305)

---
updated-dependencies:
- dependency-name: dotnet-sdk
  dependency-version: 9.0.305
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix race condition in `TransactionInfo.Fork` `PendingCalls` increment (#9702)

* [FIX] Potential NRE in the activation repartitioner (#9713)

fix potentiall NRE in the activation repartioner

* Remove infinite timespan reminder checks (#9715)

* Timeout.InfiniteTimeSpan is not allowed for reminders

* Specifically check for InfiniteTimeSpan to make clear it's usage is not allowed (and to allow for an eventual future change of the InfiniteTimeSpan value)

---------

Co-authored-by: Jerremy Koot <jerremy.koot@gmail.com>

* ResponseCompletionSource: RunContinuationsAsynchronously (#9724)

* chore(deps): bump dotnet-sdk from 9.0.305 to 9.0.306 (#9720)

Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 9.0.305 to 9.0.306.
- [Release notes](https://github.com/dotnet/sdk/releases)
- [Commits](dotnet/sdk@v9.0.305...v9.0.306)

---
updated-dependencies:
- dependency-name: dotnet-sdk
  dependency-version: 9.0.306
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add `BigInteger` codec (#9669)

* StateMachineManager: start work loop during activation (#9725)

* Flag PostgreSQL as asynchronous (#9705)

Changed isSynchronousAdoNetImplementation from true to false for PostgreSQL thanks to updates in Npgsql 8.0.
npgsql/npgsql#1130

* Enable GitHub merge queue (#9727)

Enable merge queue

* Add missing validation for the NATS stream provider (#9668)

Add missing validation for the Nats stream provider

* `ActivationDataActivatorProvider`: run grain constructor on grain scheduler (#9726)

* ActivationDataActivatorProvider: always run grain constructor on ActivationTaskScheduler

* ActivationDataActivatorProvider: always run grain constructor on ActivationTaskScheduler

* Modifying Endpoint to use Pascale Casing as EndPoint for consistency (#9671)

Co-authored-by: Ramzi Mourtada <ramourt@microsoft.com>

* treat retirement tracker as a first-class (internal) machine

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Reuben Bond <203839+ReubenBond@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Egil Hansen <egil@assimilated.dk>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bk <bknote71@gmail.com>
Co-authored-by: Da-Teach <da_teach@thehackerwithin.com>
Co-authored-by: Jerremy Koot <jerremy.koot@gmail.com>
Co-authored-by: Gutemberg Ribeiro <gutemberg@outlook.com>
Co-authored-by: Burak Büyükatlı <burak.buyukatli@gmail.com>
Co-authored-by: Ramzi Mourtada <ramzimort@gmail.com>
Co-authored-by: Ramzi Mourtada <ramourt@microsoft.com>
@github-actions github-actions bot locked and limited conversation to collaborators Nov 22, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant