Skip to content

Comments

Feature workflows remote activity reminder#5036

Open
JoshVanL wants to merge 3 commits intodapr:v1.17from
JoshVanL:feature-WorkflowsRemoteActivityReminder
Open

Feature workflows remote activity reminder#5036
JoshVanL wants to merge 3 commits intodapr:v1.17from
JoshVanL:feature-WorkflowsRemoteActivityReminder

Conversation

@JoshVanL
Copy link
Contributor

Branched from #5017

Workflow:
- Adds docs on retention policy
- Move concurrency docs to a new page.
- Clear up refs to actor state store

CLI:
- Update docs to remove need for --connection-string
- Adds note about purge `--force`.

Reminder:
- Adds reference to overwrite & failure policy

Signed-off-by: joshvanl <me@joshvanl.dev>
Signed-off-by: joshvanl <me@joshvanl.dev>
Signed-off-by: joshvanl <me@joshvanl.dev>
@JoshVanL JoshVanL requested review from a team as code owners February 12, 2026 11:19
@marcduiker
Copy link
Contributor

@JoshVanL it appears that this PR contains many of the changes also included in this one.

@JoshVanL
Copy link
Contributor Author

@JoshVanL it appears that this PR contains many of the changes also included in this one.

Yes, it's branched from that PR

Copy link
Member

@msfussell msfussell left a comment

Choose a reason for hiding this comment

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

Looking good. Some comments
I just found this one https://github.com/dapr/docs/pull/5039/changes is it a duplicate?

Only available on **reminders**.

`overwrite` is an optional boolean parameter that indicates whether to overwrite an existing reminder with the same name.
If `overwrite` is set to `true`, any existing reminder with the same name will be replaced by the new configuration.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
If `overwrite` is set to `true`, any existing reminder with the same name will be replaced by the new configuration.
If `overwrite` is set to `true`, any existing reminder with the same name is replaced by the new configuration.


`overwrite` is an optional boolean parameter that indicates whether to overwrite an existing reminder with the same name.
If `overwrite` is set to `true`, any existing reminder with the same name will be replaced by the new configuration.
If `overwrite` is set to `false` or omitted, and a reminder with the same name already exists, the operation will fail with a already exists error.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
If `overwrite` is set to `false` or omitted, and a reminder with the same name already exists, the operation will fail with a already exists error.
If `overwrite` is set to `false` or omitted, and a reminder with the same name already exists, the operation fails with a already exists error.

`overwrite` is an optional boolean parameter that indicates whether to overwrite an existing reminder with the same name.
If `overwrite` is set to `true`, any existing reminder with the same name will be replaced by the new configuration.
If `overwrite` is set to `false` or omitted, and a reminder with the same name already exists, the operation will fail with a already exists error.
Note that overwriting an existing reminder will reset its an error.state, including the number of invocations and the next trigger time, just like creating a new reminder.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
Note that overwriting an existing reminder will reset its an error.state, including the number of invocations and the next trigger time, just like creating a new reminder.
Note that overwriting an existing reminde resets its a `error.state`, including the number of invocations and the next trigger time, just like creating a new reminder.

When an actor's method completes successfully, the runtime will continue to invoke the method at the specified timer or reminder schedule. However, if the method throws an exception, the runtime catches it and logs the error message in the Dapr sidecar logs, without retrying.

To allow actors to recover from failures and retry after a crash or restart, you can persist an actor's state by configuring a state store, like Redis or Azure Cosmos DB.
When an actor's method completes successfully, the runtime will continue to invoke the method at the specified timer or reminder schedule.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
When an actor's method completes successfully, the runtime will continue to invoke the method at the specified timer or reminder schedule.
When an actor's method completes successfully, the runtime continues to invoke the method at the specified timer or reminder schedule.

failed to purge orchestration state: rpc error: code = FailedPrecondition desc = failed to purge orchestration state: failed to lookup actor: api error: code = FailedPrecondition desc = did not find address for actor
```

It is possible to purge a workflow _without_ a workflow application running by using the `--force` flag; however, this is should only be used when you are certain that no workflow instances are currently running, as it **will** otherwise corrupt the workflow state machine.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
It is possible to purge a workflow _without_ a workflow application running by using the `--force` flag; however, this is should only be used when you are certain that no workflow instances are currently running, as it **will** otherwise corrupt the workflow state machine.
It is possible to purge a workflow _without_ a workflow application running by using the `--force` flag; however, this should only be used when you are certain that no workflow instances are currently running, as it **will** corrupt the workflow state machine.

@@ -746,5 +628,3 @@ Now that you've learned how to manage workflows, learn how to execute workflows
- [.NET example](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow)
Copy link
Member

Choose a reason for hiding this comment

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

Are there examples for Python that we can add to this list?

These

These limits are imposed on a _per_ sidecar basis, meaning that if you have 10 replicas of your workflow app, the effective limit is 10 times the configured value.

Setting these limits can help prevent resource exhaustion on your Dapr sidecar and application, or to drain down a backlog of workflows if there had been a spike in activity causing resource contention.
These limits do not distinguish between different workflow or activity definitions, so they apply to all workflows and activities running in the sidecar.
Copy link
Member

Choose a reason for hiding this comment

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

This is great. Is there any other guidance that can be provided on how to get to a number that is applicable other than by trial?

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.

3 participants